2015-11-04 4 views
1

я имею небольшую проблему с моим регулярным выражением, которое я использую, чтобы извлечь итальянские номера телефонов из строкиPHP - регулярное выражение для извлечения телефонных номеров из строки

<?php 
$output = "+39 3331111111"; 
preg_match_all('/^((00|\+)39[\. ]??)??3\d{2}[\. ]??\d{6,7}$/',$output,$matches); 
echo '<pre>'; 
print_r($matches[0]); 
?> 

работает правильно, если $output просто телефон номер, но если я изменить выходной сигнал с более сложной строкой, как:

(например $output = "hello this is my number +39 3331111111 how are you?";.)

не извлечет число, как я могу изменить регулярное выражение для извлечения номера?

+0

Возможный дубликат [всеобъемлющий регулярное выражение для проверки номера телефона] (HTTP: // stackoverf low.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – hjpotter92

ответ

3

Удалить якоря и добавить границы слов \b в нужных местах:

((\b00|\+)39[\. ]??)??3\d{2}[\. ]??\d{6,7}\b 
^         ^

См regex demo.

См IDEONE demo:

$output = "hello this is my number +39 3331111111 how are you?"; 
preg_match_all('/((\b00|\+)39[\. ]??)??3\d{2}[\. ]??\d{6,7}\b/',$output,$matches); 
echo '<pre>'; 
print_r($matches[0]); 

Вы также можете использовать не-захвата групп (для «чистой» на выходе чуть позже) и жадного ? вместо ленивого ?? (регулярное выражение будет немного более эффективным) :

(?:(?:\b00|\+)39[\. ]?)?3\d{2}[\. ]?\d{6,7}\b 
^^ ^^    ^^   ^

another regex demo См

+1

он работает, спасибо! –

Смежные вопросы