2013-06-22 3 views
-1

Я пытаюсь проверить поле для телефонных номеров в США и возвращать ошибку, если информация, введенная в поле, недействительна. В настоящее время она не принимает какую-либо информации, введенной действительными, даже если регулярное выражение кажется действительным:PHP preg_match regex не работает

add_action('register_form','myplugin_register_form2'); 
function myplugin_register_form2(){ 
    $phone_number = (isset($_POST['phone_number'])) ? $_POST['phone_number']: ''; 
    ?> 
    <p id="phone_number"> 
     <label for="phone_number"><?php _e('Phone Number <font size="1">(XXX XXX XXXX)</font>','mydomain') ?><br /> 
      <input type="text" name="phone_number" id="phone_number" class="input" size="25" style="text-align:right" maxlength="14" /> 
    </p> 
    <?php 
} 

//2. Phone_number Requirement 
add_filter('registration_errors', 'myplugin_registration_errors2', 10, 3); 
function myplugin_registration_errors2 ($errors, $sanitized_user_login, $user_email) { 
$pattern = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/'; 
if (!preg_match($pattern, $phone_number, $matches)) 
{ 
     $errors->add('phone_number_error', __('<strong>ERROR</strong>: You must include a valid phone number.','mydomain')); 

    return $errors; 
} 

    if (empty($_POST['phone_number'])) 
     $errors->add('phone_number_error', __('<strong>ERROR</strong>: You must include a valid phone number.','mydomain')); 

    return $errors; 
} 
+0

Попробуйте использовать обрезку в поле ввода или попробуйте другое регулярное выражение. – Lorenz

+0

http://stackoverflow.com/questions/3357675/validating-us-phone-number-with-php-regex Существует решение – Lorenz

+0

Спасибо Aragon0, но при использовании вышеуказанного регулярного выражения и адаптации финальных бит кода в соответствии с Функция: Я ищу 'foreach ($ aNumbers as $ sNumber) { if (! preg_match ($ sPattern, $ phone_number, $ aMatches)) { $ errors-> add ('phone_number_error', __ ('ОШИБКА: Вы должен содержать действительный номер телефона. ',' mydomain ')); return $ errors; } \t} «Это не работает. Он продолжает говорить мне, что число недействительно. – Helena

ответ

0

ОК, я нашел тот, который не приводит к возникновению ошибок:

/^(?:(?:(?:1[.\/\s-]?)(?!\())?(?:\((?=\d{3}\)))?((?(?!(37|96))[2-9][0-8][0-9](?<!(11)))?[2-9])(?:\((?<=\(\d{3}))?)?[.\/\s-]?([0-9]{2}(?<!(11)))[.\/\s-]?([0-9]{4}(?<!(555(01([0-9][0-9])|1212))))(?:[\s]*(?:(?:x|ext|extn|ex)[.:]*|extension[:]?)?[\s]*(\d+))?$/ 

Но вы должны обрезать все not- числа первых:

$input_number=preg_replace("[^0-9]","",$input_number); 

С, что вы также можете форматировать свой номер, как вы хотите:

preg_match($pattern,$input_number); 
$number=$result[1] . "-" . $result[4] . "-" . $result[6]; 

Другой способ - установить маску ввода с помощью jQuery, как описано в потоке, упомянутом выше. Затем пользователь может ввести только действительный номер телефона.

Я не нашел хорошего регулярного выражения, которое соответствует многим форматам.