1

我目前正在使用这个正则表达式

"/^([0-9\(\)\/\+ \-]*)$/",

这很好,但问题是它也只接受“空白”输入和空格,它弄乱了我的验证,什么正则表达式代码可以让我只验证使用中的这种类型的输入

(999) 999-9999

并且在输入时也不接受用户的“空白”输入字段。任何长度都可以,只要它只接受我上面提到的这个输入。

外部失败的尝试:

^\(\d{3}\)\s{0,1}\d{3}-\d{4}$
/^\(\d{3,4}\) \d{3}-\d{1,10}$/

这是我为这种格式制作正则表达式的其他失败尝试。两者都不接受

(999) 999-9999
4

7 回答 7

2

你还没有说你用什么语言做这个,所以我们不知道你的正则表达式解析器有什么样的限制。例如,传统sed仅限于 BRE,awk 和 grep 可以处理 ERE,而 linux 系统上的 grep 将处理 PCRE。Perl 当然也会做 PCRE,Python 和 PHP 也一样。但是 JavaScript 只支持 BRE 的一个子集,并且遗漏了一些 POSIX 类的经典快捷方式。

所以......要在 BRE 中做到这一点,一切都支持,你的括号是字面意思的,你有有限的范围控制:

^([[:digit:]]\{3\})[[:space:]]\{0,1\}[[:digit:]]\{3\}-[[:digit:]]\{4\}$

但这是艰巨而痛苦的。您可能正在使用至少支持 ERE 的东西:

^\([[:digit:]]{3}\)[[:space:]]?[[:digit:]]{3}-[[:digit:]]{4}$

如果你的解析器支持类速记,你可以进一步缩短它:

^\(\d{3}\)\s?\d{3}-\d{4}

最后一个可以与 perl 或 PHP 的 PCRE 支持一起使用,但不能与 sed、awk 或 grep 一起使用。

另外,我要指出,这不是处理输入验证的好方法。你想要更多的灵活性。例如,这将是一个更好的主意,

  1. 去掉所有非数字字符
  2. 如果结果是 10 位,请检查有效的区号
  3. 如果结果为 11 位且第一位为 1,则检查有效的区号
  4. 否则,将其视为国际号码

您可能还需要提出其他一些条件。

于 2012-10-15T23:05:14.147 回答
1

你忘了转义括号。试试这个:^\(\d{3}\)\s{0,1}\d{3}-\d{4}$

于 2012-10-15T11:59:05.107 回答
1

不要将输入验证与数据提取混淆。

通常,强制使用地址或电话号码之类的确切格式是徒劳的。首先,您让一个人(输入数据的人)做计算机的工作(格式化数据),即使这样可行,也可能存在不适合的边缘情况。我相信,无法输入有效数据比在您的端出现一些拼写错误要糟糕得多。例如,您拒绝使用国家/地区前缀的任何内容。

所以为了简单的验证,我只看输入中是否有数字,仅此而已。就像我只是寻找@验证电子邮件地址一样。你花了几天时间来获得一个正则表达式,结果却发现它最终并不重要。

于 2012-10-15T12:06:14.937 回答
1

这对我有用。在正则表达式测试器上测试。

\([1-9][0-9]{2}\)[ ][1-9]{3}[-][0-9]{4}

这将用于完全匹配 (999) 999-9999 格式。

在代码中根据需要转义“\”。

于 2013-10-08T21:21:12.060 回答
0

使用 a+而不是*避免空格。为了避免“仅限空格”,您可以尝试以下操作:

"/^([ ]*[0-9\(\)\/\+\-]+[ ]*)*$/"
于 2012-10-15T11:57:23.670 回答
-2

在 JavaScript 中,在下面使用:

function validatePhoneNumber(number) { 
    var re = /^\(\d{3}\)\s{0,1}\d{3}-\d{4}$/;
    return re.test(number);
} 

在 PHP 中:

<?php
if (preg_match("/^\(\d{3}\)\s{0,1}\d{3}-\d{4}$/", $number)) {
    //phone number is valid code
}
?>
于 2012-10-15T16:54:37.753 回答
-2

想出了解决方案,每个人都建议的正则表达式不接受“(”和“)”

所以我做了这个

"/^\.{1}\[0-9]{3}\.{2}\[0-9]{3}\-\[0-9]{4}$/",

以便它可以接受 (999) 999-9999 输入的 "(" 和 ")"

我只需要这个输入的原因是因为我有一个用于自动屏蔽的脚本,用户的每个输入都将转换为这种格式,这就是为什么我需要正则表达式验证中的特定格式。

于 2012-10-15T18:41:17.920 回答