2013-05-10 7 views
1

Я пытаюсь написать регулярное выражение для моего кода, регулярное выражение используется для проверки формата телефонного номера, первые две цифры должны быть либо 01,04,05,06,07,08, 09, а затем тире (-) и следуют только 6 цифрами.Регулярное выражение PHP корректно не корректно

Я использовал следующее регулярное выражение: 0[1456789]{1}-[0-9]{6}. Я использовал следующий сайт, чтобы убедиться, что мое регулярное выражение работает правильно: RegExr и я проверяю его на следующей 01-123456

Однако, когда я запускаю мой код, моя функция возвращает, как если число является недействительным, который не.

Вот мой код:

function validHomePhone() { 
    global $home_phone; 

    $home_phone_regex = "0[1456789]{1}-[0-9]{6}"; 
    return preg_match($home_phone_regex, $home_phone); 
} 

Почему я получаю такие результаты?

+6

Вам не нужен разделитель в вашем регулярном выражении? – andrewsi

+2

Я также хотел бы рекомендовать упрощенную версию вашего регулярного выражения '/ 0 [14-9] - \ d {6} /'. – Joe

ответ

7

Вам необходимо заключить выражение в delimiter, как это:

/0[1456789]{1}-[0-9]{6}/ 

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

/^0[1456789]{1}-[0-9]{6}$/ 

И в то время как мы «вновь на это, {1} квантор избыточна:

/^0[1456789]-[0-9]{6}$/ 

И наконец, [1456789] можно уменьшить до [14-9]. Лично я бы этого не сделал, потому что IMHO уменьшает читаемость без реальной выгоды, но это то, что может быть полезно где-то еще.

+3

В качестве функции в стороне ваша функция должна принимать параметр $ home_phone, а не глобальную функцию $ home_phone validHomePhone ($ home_phone) и стереть глобальную линию. – beiller

+0

Я пробовал сначала только с '/' в начале и в конце, но не пытался с '^' и '$', хотя, поскольку он работал без них, не было бы необходимости в них Спасибо Jon –

+1

@ aizen92: Также обратите внимание на комментарий Beiller выше, он на 200% прав. – Jon

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