我想使用Javascript中的正则表达式验证一个10位的美国式电话号码,然后通过url将其提交给PHP服务器。它将是表单中的一个简单文本框,用于输入数字和要提交的按钮。
例如,在验证之后,url可能是:
thisdomainname.com/resultspage.php?phonenumber=4392931234我知道正则表达式是如何工作的,但我对更复杂的表达式感到困惑。我在堆栈溢出和互联网上搜索了一个解决方案,但没有找到完全适合我需要的解决方案,并且/或在运行它时工作。
我需要它省略所有非数字字符(如parens,破折号和句点),也省略额外的前导"1“,这是可选的在美国10位电话号码。
它应允许下列格式(验证为正确):
1-(805) xxx-xxxx215.xxx.xxxx但以无效为由拒绝:
805 931 42805 931 42ab105 931 4288理想情况下,它将允许根据“北美编号计划”的电话号码,该计划有以下规则:
“区号从2-9开始,后面跟着0-8,然后是任何第三位数字。第二组三位数,称为中央办事处或交换码,从2-9开始,后面跟着任何两位数。最后四个数字,也就是车站代码,没有任何限制。”
我在下面找到了一个正则表达式来实现这一点,但是我无法让它与可选的前导"1“数字一起工作。
^\(?([2-9][0-8][0-9])\)?[-. ]?([2-9][0-9]{2})[-. ]?([0-9]{4})$就像我说的,我已经找到了很多解决这个问题的方法,但是没有一个能解决我上面提到的所有情况。
提前谢谢。
发布于 2013-09-08 02:25:35
一个更简单的方法就是删除所有的非数字字符,并确保数字的数目是有效的。
function isValidPhoneNumber(value) {
if (!value) return false;
var count = value.replace(/[^0-9]/g, "").length;
return count == 10 || count == 11;
}发布于 2013-09-08 02:48:10
同意w/ Robert在测试前从输入字符串中删除所有非数字字符。在此进一步测试有关可接受数字的附加规则:
<?php
$testStr = "134dusrtu56sdjhsdf7890asd 01"; // input string
$parsedResult = preg_replace( '/[^\d]/', '', $testStr ); // remove non-numeric characters
$confirmation = ( preg_match( '/^[1]?[2-9][0-8][0-9][2-9][\d]{6}$/', $parsedResult ) === 1 ); // parsed numeric string meets your rules?
echo $parsedResult . ": " . (int) $confirmation; // 13456789001: 1 (1=true;0=false)另外,请注意:永远不要将电话号码转换为整数溢出,这可能会发生.此外,存储解析的数字而不是客户端的原始输入是非常好的,特别是当您使用该数字与自动文本或拨号服务。
https://stackoverflow.com/questions/18679577
复制相似问题