工作液(回答以下)正則表達式匹配號碼組/塊
$phones = [
"5141234567, 5144384062",
"608-909-5003 Home : 629-716-8085",
"Cell: 705-111-7699 workcell: 547-924-5097",
"729-242-1353; 718-251-0292",
"Call 555-1212 or 1-800-555-1212, 1 (949) 637 2826; +1 233 455 7878",
"6097999388 ext 128",
];
foreach ($phones as $phone) {
$phone = trim($phone);
$possibles = [];
preg_match_all("/(?:[+][0-9]+[ ]?)?[(]?\b0*[0-9]{3}[)]?(?:[ .-]?[0-9]){7}\b/", $phone, $matches);
echo $phone . ': ' . print_r($matches, true);
}
尋找正則表達式用空格連字符和括號來獲取數字的所有地方。這些是用戶輸入的註釋中的電話號碼。無需查找3位和4位數字的組。
這裏有一些應該匹配的例子。符合我們當前數據庫的任何事件,直到下一個單詞或;
或,
- +1 456 934 7814
- (614)-443 8762
實例日誌。其中每一個都作爲一條線一次處理。
- 細胞:9845122842辦公室:8649984345(只是數部分沒有細胞:或辦公室:需要以匹配)
- 7824562892; 5144459682
- 5144384412 ext。 282(分機或組與少於7個位數不包括連字符,空格和
()
可以忽略不計) - 叫我上+1 8142104482下午6點以後(
+1 8142104482
應該匹配)
摘要所以,正則表達式應該幫助選擇數字塊(7位或更多位數),並在開頭加上可選的+,並在其間加上-
,space
,()
。
更新
這一個漂亮的取得:
preg_match_all("/(\d+[\-\s]\d+)+/x",
"Call 555-1212 or 1-800-555-1212, 1 (949) 637 2826; +1 233 455 7878", $matches);
print_r($matches);
輸出:
Array
(
[0] => Array
(
[0] => 555-1212
[1] => 1-800
[2] => 555-1212
[3] => 637 2826
[4] => 1 233
[5] => 455 7878
)
[1] => Array
(
[0] => 555-1212
[1] => 1-800
[2] => 555-1212
[3] => 637 2826
[4] => 1 233
[5] => 455 7878
)
)
預期/所需
[0] => 555-1212
[1] => 1-800-555-1212
[2] => 1 (949) 637 2826
[3] => +1 233 455 7878
你知道所有數字至少10長,也可以有更短的數字呢?你怎麼想4解析,與_ext._? – Halcyon
也許你可以從[this](http://www.regexlib。COM/Search.aspx?K =電話)。 – ClasG
@Halcyon補充一點。 – mishka