PHP: подтверждение номеров телефонов в США

В настоящее время я работаю с проверкой номеров телефонов в США. Проблема в том, что код ниже всегда повторяется после действительного или недопустимого ввода. Please enter a valid phone number . Моя основная логика моего кода заключается в том, что я проверяю с помощью preg_match, чтобы увидеть, есть ли соответствие для действительного числа. пример

Как я могу это исправить или есть лучший способ проверить номера телефонов? Кроме того, есть ли эхо число, отформатированное так: ( (123)456-7890 ?

PHP :

 if (isset($_POST['phone'])) { if(preg_match('/^(\({1}\d{3}\){1}|\d{3})(\s|-|.)\d{3}(\s|-|.)\d{4}$/',$phone)) { echo ('<div id="phone_input"><span id="resultval">'.$phone.'</span></div>'); } else { echo '<div id="phone_input"><span id="resultval">Please enter a valid phone number</span></div>'; } } 

Solutions Collecting From Web of "PHP: подтверждение номеров телефонов в США"

Попробуй это

 <?php class Validation { public $default_filters = array( 'phone' => array( 'regex'=>'/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/', 'message' => 'is not a valid US phone number format.' ) ); public $filter_list = array(); function Validation($filters=false) { if(is_array($filters)) { $this->filters = $filters; } else { $this->filters = array(); } } function validate($filter,$value) { if(in_array($filter,$this->filters)) { if(in_array('default_filter',$this->filters[$filter])) { $f = $this->default_filters[$this->filters[$filter]['default_filter']]; if(in_array('message',$this->filters[$filter])) { $f['message'] = $this->filters[$filter]['message']; } } else { $f = $this->filters[$filter]; } } else { $f = $this->default_filters[$filter]; } if(!preg_match($f['regex'],$value)) { $ret = array(); $ret[$filter] = $f['message']; return $ret; } return true; } } //example usage $validation = new Validation(); echo nl2br(print_r($validation->validate('phone','555-555-1212'),true)); echo nl2br(print_r($validation->validate('phone','(555)-555-1212'),true)); echo nl2br(print_r($validation->validate('phone','555 555 1212'),true)); echo nl2br(print_r($validation->validate('phone','555.555.1212'),true)); echo nl2br(print_r($validation->validate('phone','(555).555.1212'),true)); echo nl2br(print_r($validation->validate('phone','(555)---555.1212'),true));//will not match ?>