Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP验证regex电话号码_Php_Regex - Fatal编程技术网

用PHP验证regex电话号码

用PHP验证regex电话号码,php,regex,Php,Regex,这是关于我之前问过的一个问题的另一个问题。我希望允许用户输入以下格式的美国电话号码 (800)-555-1212 800-555-1212 让它只检查数据库中的号码8005551212 我见过像这样的正则表达式 /^[\+]([0-9]*)\s*(?\s*([0-9]{3})?\s*)?[\s\-\.]*([0-9]{3}][\s\-\.]*([0-9]{4})[a-zA-Z\s\,\.]*[x\\\\]*[a-zA-Z\.*[a-zA-Z]*([\d]]/ 可能会工作,但我不确定如何将其从我提

这是关于我之前问过的一个问题的另一个问题。我希望允许用户输入以下格式的美国电话号码

(800)-555-1212

800-555-1212

让它只检查数据库中的号码8005551212

我见过像这样的正则表达式
/^[\+]([0-9]*)\s*(?\s*([0-9]{3})?\s*)?[\s\-\.]*([0-9]{3}][\s\-\.]*([0-9]{4})[a-zA-Z\s\,\.]*[x\\\\]*[a-zA-Z\.*[a-zA-Z]*([\d]]/

可能会工作,但我不确定如何将其从我提供的链接实现到代码中


我是php新手,对正则表达式一无所知。非常感谢您的帮助。

如果javascript正常,您可以使用

<script type="text/javascript">
function matchClick() {
  var re = new RegExp("Your regex here");
  if (document.formname.phone.value.match(re)) {
     alert("Ok");
     return true;
  } else {
     alert("Not ok");
     return false;
  }
} 
</script>

函数matchClick(){
var re=new RegExp(“此处为您的regex”);
if(document.formname.phone.value.match(re)){
警报(“正常”);
返回true;
}否则{
警报(“不正常”);
返回false;
}
} 
在表单提交或文本框模糊时调用此函数


如果您对您的正则表达式有疑问,您可以在

中验证它。此函数用于验证电话号码,如果验证,则返回true;如果无效,则返回false。这个函数非常简单,是我写的。


你可以使用这个模式

\(?\d{3,3}\)?-\d{3,3}-\d{4,4}

试试这个

<?php
    $t='/\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/';
    $arr=preg_match($t,'(800)-555-1212',$mat);
    $arr=preg_match($t,'800-555-1212',$mat);
    print_r($mat);
?>


测试

Re:Rohan Kumar的溶液

<?php
$t='/\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/';
$arr=preg_match($t,'(800)-555-1212',$mat);
$arr=preg_match($t,'800-555-1212',$mat);
print_r($mat);
?>


它确实解决了诸如800-123-2222等假电话号码的问题。实际电话号码的第一位数字至少为“2”。虽然其他解决方案的格式正确,但它们不能解决人们输入电话号码(如800-000-1234)的问题,这在提供的其他解决方案中是正确的。

有两件事我永远不会费心通过格式验证,电子邮件和电话号码。如果用户必须通过电话联系,他们会找到正确的答案。有很多答案。检查这些链接为什么这个问题会用mysql和mysqli标记?@YourCommonSense我用mysql和mysqli标记它,因为它是使用mysql的项目的一部分。我在问题中发布了链接。@BenP.Dorsi-Todaro,但与问题无关。请记住,这些标记用于问题的上下文。可以工作,但需要是$arr=preg_match($t,'8005551212',$mat);不要用破折号,我要用@Donatas Navidonskis方法。小心点。它不是通用验证器。它不处理以
00
+
符号开头的变体。@mikep为什么不添加“00 XXX”或“+XX”?@DonatasNavidonskis,因为数组中已经有12个项目,要支持
+
00
变体,我应该添加2*12个新项目=总共36个项目,这不是很方便。@mikep是的,但这是一个简单的解决方案,如果你有更复杂的情况,确定这个方法不适合这种情况。
<?php
$t='/\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/';
$arr=preg_match($t,'(800)-555-1212',$mat);
$arr=preg_match($t,'800-555-1212',$mat);
print_r($mat);
?>