首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用regex和javascript验证美国电话号码,用php提交

用regex和javascript验证美国电话号码,用php提交
EN

Stack Overflow用户
提问于 2013-09-08 01:35:59
回答 2查看 5.6K关注 0票数 2

我想使用Javascript中的正则表达式验证一个10位的美国式电话号码,然后通过url将其提交给PHP服务器。它将是表单中的一个简单文本框,用于输入数字和要提交的按钮。

例如,在验证之后,url可能是:

代码语言:javascript
复制
thisdomainname.com/resultspage.php?phonenumber=4392931234

我知道正则表达式是如何工作的,但我对更复杂的表达式感到困惑。我在堆栈溢出和互联网上搜索了一个解决方案,但没有找到完全适合我需要的解决方案,并且/或在运行它时工作。

我需要它省略所有非数字字符(如parens,破折号和句点),也省略额外的前导"1“,这是可选的在美国10位电话号码。

它应允许下列格式(验证为正确):

  • 1-(805) xxx-xxxx
  • 215.xxx.xxxx

但以无效为由拒绝:

  • 805 931 42
  • 805 931 42ab
  • 105 931 4288

理想情况下,它将允许根据“北美编号计划”的电话号码,该计划有以下规则:

“区号从2-9开始,后面跟着0-8,然后是任何第三位数字。第二组三位数,称为中央办事处或交换码,从2-9开始,后面跟着任何两位数。最后四个数字,也就是车站代码,没有任何限制。”

我在下面找到了一个正则表达式来实现这一点,但是我无法让它与可选的前导"1“数字一起工作。

代码语言:javascript
复制
^\(?([2-9][0-8][0-9])\)?[-. ]?([2-9][0-9]{2})[-. ]?([0-9]{4})$

就像我说的,我已经找到了很多解决这个问题的方法,但是没有一个能解决我上面提到的所有情况。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-09-08 02:25:35

一个更简单的方法就是删除所有的非数字字符,并确保数字的数目是有效的。

代码语言:javascript
复制
function isValidPhoneNumber(value) {
    if (!value) return false;
    var count = value.replace(/[^0-9]/g, "").length;

    return count == 10 || count == 11;
}
票数 3
EN

Stack Overflow用户

发布于 2013-09-08 02:48:10

同意w/ Robert在测试前从输入字符串中删除所有非数字字符。在此进一步测试有关可接受数字的附加规则:

代码语言:javascript
复制
<?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)

另外,请注意:永远不要将电话号码转换为整数溢出,这可能会发生.此外,存储解析的数字而不是客户端的原始输入是非常好的,特别是当您使用该数字与自动文本或拨号服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18679577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档