我正在尝试整合一个全面的正则表达式来验证电话号码.理想情况下它会处理国际格式,但它必须处理美国格式,包括以下内容:
我将回答我目前的尝试,但我希望有人能有更好的和/或更优雅的东西.
编辑: 我混合并修改了下面给出的两个答案,以形成完整的功能,现在做我想要的,然后一些......所以我想我会在这里发布,以防其他人来找同样的事情.
/*
* Function to analyze string against many popular formatting styles of phone numbers
* Also breaks phone number into it's respective components
* 3-digit area code, 3-digit exchange code, 4-digit subscriber number
* After which it validates the 10 digit US number against NANPA guidelines
*/
function validPhone($phone) {
$format_pattern = '/^(?:(?:\((?=\d{3}\)))?(\d{3})(?:(?<=\(\d{3})\))?[\s.\/-]?)?(\d{3})[\s\.\/-]?(\d{4})\s?(?:(?:(?:(?:e|x|ex|ext)\.?\:?|extension\:?)\s?)(?=\d+)(\d+))?$/';
$nanpa_pattern = '/^(?:1)?(?(?!(37|96))[2-9][0-8][0-9](?<!(11)))?[2-9][0-9]{2}(?<!(11))[0-9]{4}(?<!(555(01([0-9][0-9])|1212)))$/';
//Set array of variables to false initially
$valid = array(
'format' => false,
'nanpa' => false,
'ext' => false,
'all' => false …Run Code Online (Sandbox Code Playgroud) 我目前正在验证美国电话号码。问题是下面的代码总是在有效或无效输入后回显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>';
}
}
Run Code Online (Sandbox Code Playgroud) 我正在制作一个电话号码验证器,所有号码都应该168以9位开头,然后是9位数123456789.总的来说,电话号码应该只有12位数.
我试过这个
$phoneNumber = '168921500789';
if( preg_match( "/^\168[0-9]{9}$/", $phoneNumber ) ){
echo "Valid number";
} else {
echo "Invalid number";
}
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时,该数字无效.如何使脚本只取12个必须以168?开头的数字.