Ошибка регулярного выражения: «Предупреждение: ereg () [function.ereg]: REG_ERANGE» в PHP - PullRequest
0 голосов
/ 23 октября 2008

Код ниже дает мне эту загадочную ошибку, и я не могу ее понять. Я новичок в регулярных выражениях и, следовательно, в тупик. Регулярное выражение должно проверять любой международный номер телефона.

Любая помощь будет высоко ценится.

function validate_phone($phone)
{
    $phoneregexp ="^(\+[1-9][0-9]*(\([0-9]*\)|-[0-9]*-))?[0]?[1-9][0-9\- ]*$";

    $phonevalid = 0;

    if (ereg($phoneregexp, $phone))
    {
        $phonevalid = 1;
    }else{
        $phonevalid = 0;
    }
}

Ответы [ 4 ]

2 голосов
/ 23 октября 2008

Хм, хорошо, код, который вы вставили, не совсем корректен, я исправил его, добавив пропущенные кавычки, пропущенные разделители и изменив preg на preg_match. Я не получил предупреждение.

Редактировать : увидев другой комментарий, вы имели в виду «ereg», а не «preg» ... который выдает предупреждение. Попробуйте использовать preg_match() вместо;)

<?php
function validate_phone($phone) {
    $phoneregexp ='/^(\+[1-9][0-9]*(\([0-9]*\)|-[0-9]*-))?[0]?[1-9][0-9\- ]*$/';

    $phonevalid = 0;

    if (preg_match($phoneregexp, $phone)) {
        $phonevalid = 1;
    } else {
        $phonevalid = 0;
    }
}
validate_phone("123456");
?>
1 голос
/ 23 октября 2008

Если это PHP, то регулярное выражение должно быть заключено в кавычки. Кроме того, что такое preg? Вы имели в виду preg_match?

Другое дело. PHP знает логические значения. Каноническое решение скорее будет выглядеть так:

return preg_match($regex, $phone) !== 0;

РЕДАКТИРОВАТЬ: Или, используя ereg:

return ereg($regex, $phone) !== FALSE;

(Здесь явный тест против FALSE не является строго необходимым, но так как ereg возвращает число при успехе, я чувствую себя безопаснее, приведя значение в bool).

0 голосов
/ 23 октября 2008

Это часть [0-9\\- ] вашего RE - она ​​не экранирует "-" должным образом. Измените его на [0-9 -], и вы должны быть в порядке («-» на последней позиции в классе символов рассматривается как литерал, а не как часть спецификации диапазона).

0 голосов
/ 23 октября 2008

Просто, чтобы предоставить справочный материал, пожалуйста, прочитайте

или если вы хотите использовать регулярное выражение POSIX:

Правильный пример кода уже указан выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...