当前位置: 首页 > 知识库问答 >
问题:

如何使用正则表达式验证电话号码

娄学文
2023-03-14

我正试图建立一个全面的正则表达式来验证电话号码。理想情况下,它将处理国际格式,但它必须处理美国格式,包括以下内容:

  • 1-234-567-8901
  • 1-234-567-8901x1234
  • 1-234-567-8901ext1234
  • 1 (234) 567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901

我将用我目前的尝试来回答,但我希望有人有更好和/或更优雅的东西。

共有3个答案

米楚青
2023-03-14
.*

如果用户想给你他们的电话号码,那么请相信他们会把它做好。如果他们不想给你一个有效的数字,那么强迫他们输入一个有效的数字,要么将他们发送到竞争对手的网站,要么让他们输入一个适合你的正则表达式的随机字符串。我甚至可能会被诱惑去查询一个溢价占星术热线的号码,然后输入它。

我还将以下任何一项视为网站上的有效条目:

"123 456 7890 until 6pm, then 098 765 4321"  
"123 456 7890 or try my mobile on 098 765 4321"  
"ex-directory - mind your own business"
麻宜春
2023-03-14

事实证明,至少对北美来说,这有一个规范,叫做NANP。

您需要准确指定您想要的内容。什么是合法分隔符?空格、破折号和句点?不允许使用分隔符?可以混合分隔符(例如,0.111-222.3333)?如何处理扩展名(例如,111-222-3333x 44444)?特殊号码呢,比如911?区号是可选的还是必需的?

这是一个7位或10位数字的正则表达式,允许扩展名,分隔符是空格、破折号或句点:

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
曹臻
2023-03-14

更好的选择…只需去掉输入中的所有非数字字符(除了“x”和前导的“符号”),要小心,因为英国人在被要求使用国际前缀时倾向于以非标准形式书写数字(在这种情况下,你应该完全丢弃国际前缀)。

然后,你会得到如下值:

 12345678901
 12345678901x1234
 345678901x1234
 12344678901
 12345678901
 12345678901
 12345678901
 +4112345678
 +441234567890

然后,当你显示时,重新格式化到你心中的内容。例如

  1 (234) 567-8901
  1 (234) 567-8901 x1234
 类似资料:
  • 在注册会员时,经常需要输入电话号码,电话号码是指手机号码或者固定电话。如果输入的内容不合法,则会向用户输出提示。本实例模拟实现电话号码的验证功能,接收用户在控制台输入的电话号码,然后进行判断,并将结果输出。 在这里使用《 Java正则表达式》一节中讲到的正则表达式支持的字符来实现,步骤如下。 (1) 创建名为 Test21.java 的 Java 文件,在 main() 方法中开始编写代码。 (2

  • 我正在修改一个脚本。该脚本包含一个表单,允许访问者向电话号码发送短信。在表单中,我有一个文本框,用户在其中输入文本接收器的电话号码。我正在使用正则表达式验证电话号码,以防止垃圾邮件发送者,并确保用户键入正确的号码。 以下是阿富汗使用的默认电话号码: 正则表达式验证首先应该确保使用93,然后确保在93之后使用78、77、79或700(其中之一),最后是6位数。 下面是我试图修复的Javascript

  • 我需要有关验证电话号码的正则表达式行的帮助,它如下所示: 这些是它验证的格式: 我想验证如下数字: +263 772 485 384 773456284 0773456284 大部分是国际号码

  • 本文向大家介绍Java使用正则表达式验证手机号和电话号码的方法,包括了Java使用正则表达式验证手机号和电话号码的方法的使用技巧和注意事项,需要的朋友参考一下 一个朋友需要,所以写了这两个,话不多说,看代码 中国电信号段 133、149、153、173、177、180、181、189、199 中国联通号段 130、131、132、145、155、156、166、175、176、185、186 中国

  • 问题内容: 我想在PHP中测试正则表达式的有效性,最好在使用前进行测试。这样做的唯一方法是实际尝试a 并查看是否返回吗? 有没有更简单/正确的方法来测试有效的正则表达式? 问题答案: 正如用户 pozs 所说,还应 考虑在测试环境中 放在 preg_match() () 前面, 以防止发出警告或通知。 要验证RegExp只需对其运行 (无需知道您要预先测试的数据) 。如果返回显式false(),则

  • 问题内容: 我正在尝试为这种格式的电话号码创建正则表达式模式:999-999-9999 所以我尝试了这个表达式: 但是该格式适用于数字,例如:+ 1-999-999-9999 如果有人帮助我修改模式以使其与999-999-9999格式匹配,我将不胜感激,这意味着我不希望用户在字符串的开头输入+号。 谢谢 问题答案: 您尝试过的表达式明确指出: 甲接着是单个数字后跟一个连字符和3个数字(两次),接着