我正在研究一個正則運算式來匹配這組數字:
xxxx xxx xxxx
01 xxx xxxx
234 1 xxx xxxx
xxxx-xxx-xxxx
xxxxxxxxxxx
234 xxx xxx xxxx
234(xxx)xxx-xxxx
234(xxx)xxx xxxx
234(xxx)xxx xxxx
234(xxx) xxx xxxx
234(xxx)xxx-xxxx
234xxxxxxxxxx
234xxxxxxxxxx
規則是:
- 最多 11 位數字(任意數字組合,不包括靜態部分)
- 可選 (234) 或 ( 234)
- 可選 1 或 01 或 234 1
- 上面指定的可選括號。
這是為了驗證尼日利亞電話號碼系統。我已經進行了廣泛的搜索,到目前為止還沒有看到任何好的解決方案。
我有這樣的表達:
/^(\ )?234[0-9]*?.*/gm
但它與沒有 (234) 的那些不匹配。
具體來說:
xxxx xxx xxxx
01 xxx xxxx
xxxx-xxx-xxxx
xxxxxxxxxxx
我怎樣才能使這項作業?我對正則運算式有點陌生,希望能得到任何幫助。
演示
uj5u.com熱心網友回復:
有一些簡單的事情:
$output = trim(filter_var($input, FILTER_SANITIZE_NUMBER_INT), ' ');
您將只剩下數字。現在你可能想要洗掉幾個可選的開始:
$output = preg_replace('/^0|^01|^234|^2341/', '', $input);
最后,您可能想檢查長度是否有效。
這不會使像“ 234(123) (456) 7890”這樣的數字無效,但應該這樣嗎?畢竟,您只能撥打號碼。
uj5u.com熱心網友回復:
您可以使用
^(?:(?:(?:\ ?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4})(?:\W*\d{3})?\W*\d{4}$
請參閱正則運算式演示。詳情:
^- 字串的開始(?:(?:(?:\ ?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4}):(?:(?:\ ?234(?:\h1)?|01)\h*)?- 一個可選的出現(?:\ ?234(?:\h1)?|01)- 一個可選項,然后是234可選項,后跟一個水平空格和1, 或01\h*- 零個或多個水平空白
(?:\(\d{3}\)|\d{3})|-(, 三位數,)或三位數, 或\d{4}- 四位數
(?:\W*\d{3})?- 零個或多個非單詞字符的可選序列,然后是 3 個數字\W*- 零個或多個非單詞字符\d{4}- 四位數$- 字串的結尾。
要匹配較長字串中任何位置的電話號碼,請使用
(?:(?:(?:\ ?234(?:\h1)?|01)\h*)?(?:\(\d{3}\)|\d{3})|\d{4})(?:\W*\d{3})?\W*\d{4}(?!\d)
請參閱正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/370974.html
