使用正则表达式和javascript验证美国电话号码并使用php提交

时间:2013-09-08 01:36:00

标签: php javascript regex validation

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

例如,验证后,网址可能是:

thisdomainname.com/resultspage.php?phonenumber=4392931234

我知道正则表达式是如何工作的,但却被更复杂的表达式所迷惑。我已经搜索了stackoverflow和互联网的解决方案,并找到了几个,但没有一个符合我需要的确切和/或在我运行时工作。

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

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

  • 1-(805) xxx-xxxx

  • 215.xxx.xxxx

但拒绝无效:

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

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

  

“区号以2-9开头,后跟0-8,然后是第三位数字。   第二组三个数字,称为中心局或交换代码,以2-9的数字开头,后跟任意两位数字。   最后的四位数字,称为电台代码,没有任何限制。“

我找到了一个正则表达式来实现下面这个,但我无法使用可选的前导“1”数字。

^\(?([2-9][0-8][0-9])\)?[-. ]?([2-9][0-9]{2})[-. ]?([0-9]{4})$

就像我说的那样,我已经找到了许多解决这个问题的解决方案,但没有一个可以解决我上面列出的所有情况。

提前致谢。

2 个答案:

答案 0 :(得分:4)

更简单的方法是删除所有非数字字符并确保位数有效

function isValidPhoneNumber(value) {
    if (!value) return false;
    var count = value.replace(/[^0-9]/g, "").length;

    return count == 10 || count == 11;
}

答案 1 :(得分:0)

同意Robert Byrne在测试之前从输入字符串中剥离所有非数字字符。在这里进一步测试您所说的关于可接受数字的附加规则:

<?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)

另外,只是一个预防性说明:永远不会将电话号码转换为整数 - 可能会发生溢出。此外,存储解析的数字而不是客户端的原始输入是完全正常的,特别是如果您使用自动文本或拨号服务的号码。