regex — Не понимаю, почему моей программе PHP не удалось проверить номер телефона?

Я не понимаю, почему код, который я написал, не может идентифицировать номер телефона.
Вот код:

 <?php
$sPattern = "/^
(?:                                 # Area Code
(?:
\(                          # Open Parentheses
(?=\d{3}\))                 # Lookahead.  Only if we have 3 digits and a closing parentheses
)?
(\d{3})                         # 3 Digit area code
(?:
(?<=\(\d{3})                # Closing Parentheses.  Lookbehind.
\)                          # Only if we have an open parentheses and 3 digits
)?
[\s.\/-]?                       # Optional Space Delimeter
)?
(\d{3})                             # 3 Digits
[\s\.\/-]?                          # Optional Space Delimeter
(\d{4})\s?                          # 4 Digits and an Optional following Space
(?:                                 # Extension
(?:                             # Lets look for some variation of 'extension'
(?:
(?:e|x|ex|ext)\.?       # First, abbreviations, with an optional following period
|
extension               # Now just the whole word
)
\s?                         # Optionsal Following Space
)
(?=\d+)                         # This is the Lookahead.  Only accept that previous section IF it's followed by some digits.
(\d+)                           # Now grab the actual digits (the lookahead doesn't grab them)
)?                                  # The Extension is Optional
$/x";                               // /x modifier allows the expanded and commented regex

$aNumbers = array(
'here is your website: 123-456-7890x123',
'123.456.7890x123',
'123 456 7890 x123',
'(123) 456-7890 x123',
'123.456.7890x.123',
'123.456.7890 ext. 123',
'123.456.7890 extension 123456',
'123 456 7890',
'123-456-7890ex123',
'123.456.7890 ex123',
'123 456 7890 ext123',
'456-7890',
'456 7890',
'+1 456 7890 x123',
'1234567890',
'() 456 7890'
);

foreach($aNumbers as $sNumber) {
if (preg_match($sPattern, $sNumber, $aMatches)) {
echo 'Matched ' . $sNumber . "\n";
print_r($aMatches);
} else {
echo 'Failed ' . $sNumber . "\n";
}
}
?>

Вот вывод:

Failed here is your website: 123-456-7890x123
Matched 123.456.7890x123 Array ( [0] => 123.456.7890x123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched 123 456 7890 x123 Array ( [0] => 123 456 7890 x123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched (123) 456-7890 x123 Array ( [0] => (123) 456-7890 x123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched 123.456.7890x.123 Array ( [0] => 123.456.7890x.123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched 123.456.7890 ext. 123 Array ( [0] => 123.456.7890 ext. 123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched 123.456.7890 extension 123456 Array ( [0] => 123.456.7890 extension 123456 [1] => 123 [2] => 456 [3] => 7890 [4] => 123456 )
Matched 123 456 7890 Array ( [0] => 123 456 7890 [1] => 123 [2] => 456 [3] => 7890 )
Matched 123-456-7890ex123 Array ( [0] => 123-456-7890ex123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched 123.456.7890 ex123 Array ( [0] => 123.456.7890 ex123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched 123 456 7890 ext123 Array ( [0] => 123 456 7890 ext123 [1] => 123 [2] => 456 [3] => 7890 [4] => 123 )
Matched 456-7890 Array ( [0] => 456-7890 [1] => [2] => 456 [3] => 7890 )
Matched 456 7890 Array ( [0] => 456 7890 [1] => [2] => 456 [3] => 7890 )
Failed +1 456 7890 x123
Matched 1234567890 Array ( [0] => 1234567890 [1] => 123 [2] => 456 [3] => 7890 )
Failed () 456 7890

Мой фокус на линии:

'here is your website: 123-456-7890x123',
'+1 456 7890 x123',

Есть номер, но он не извлекает и не проверяет его. Как я могу это сделать?

0

Решение

Ваш шаблон регулярного выражения начинается с «^», поэтому число должно начинаться с начала строки. Удалите это, и оно будет соответствовать, то есть изменению:

    $sPattern = "/^

в

    $sPattern = "/

Также я рекомендую использовать regex101.com для проверки ваших регулярных выражений. Я нахожу это чрезвычайно полезным.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector