首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确认电话号码的正则表达式

确认电话号码的正则表达式
EN

Stack Overflow用户
提问于 2014-11-05 11:19:00
回答 2查看 1.6K关注 0票数 1

帮助我为以下条件编写正则表达式

  1. 数字可以以+开头
  2. 数字可以包含-或。但不是()和/
  3. 数字可以从0开始
  4. 字符串中的最小数字应为9位,不包括扩展细节和启动+。
  5. 电话号码字段中的最大号码不应超过14 (不包括+)。
  6. 如果字符串包含ex/ext/x,则后面的数字不应超过5个字符(通常为4个)

以上所述应满足以下示例

代码语言:javascript
运行
复制
0-1234-123456
+91-1234-56789012
+91-1234-56789012 x1234
+91-1234-56789012 ex1234
+91-1234-56789012 ext12345
+91-1234-56789012x1234
+91-1234-56789012ex1234
+91-1234-56789012ext12345
91-1234-56789012
91-1234-56789012 x1234
91-1234-56789012 ex1234
91-1234-56789012 ext12345
91-1234-56789012x1234
91-1234-56789012ex1234
91-1234-56789012ext12345
91123456789012
91123456789012 x1234
91123456789012 ex1234
91123456789012 ext12345
91123456789012x1234
91123456789012ex1234
91123456789012ext12345
91.1234.56789012
91.1234.56789012 x1234
91.1234.56789012 ex1234
91.12345.6789012 ext12345
91.12345.6789012x1234
91.12345.6789012ex1234
91.12345.6789012ext12345
1-234-567-8901
1-234-567-8901 x1234
1-234-567-8901 ext1234
1 234 567-8901
1.234.567.8901
12345678901

我发现网上几乎没有链接,其中之一是http://ericholmes.ca/php-phone-number-validation-revisited/

以及堆叠溢出

A comprehensive regex for phone number validation

也是

代码语言:javascript
运行
复制
^(?:(?:\+?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+))?$

不适用于上面的许多内容

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-05 13:12:10

代码语言:javascript
运行
复制
^\+?(\d[.\- ]*){9,14}(e?xt?\d{1,5})?$

解释;

  • ^断言字符串的开始
  • \+?匹配一个可选的加号
  • (\d[.\- ]*){9,14}介于9到14个位数之间,可能由空格、点或破折号分隔。
  • (e?xt?\d{1,5})?可以选择x,可能前面加上e,或者后面跟着t。字母后面总是1到5个数字。
  • $断言字符串的结束
票数 4
EN

Stack Overflow用户

发布于 2014-11-05 13:26:19

这是可以做到的,但取决于您使用的是哪种语言(我们总是需要知道使用regexs进行编程),所以如果这不适用于您,请使用所使用的语言进行答复。我已经在PHP5上测试过。)

您的条件5(电话号码中最多14个字符)似乎是错误的,因为有几个示例包含16个字符,如果它们包含点或连字符。在任何情况下,这不会检查整个事件的总长度,因为它会进行其他长度检查;它需要第二个正则表达式,或者更好的是,预先检查字符串长度(例如在PHP中调用strlen)。

您可能需要在分机号中留出一个空格,例如电话分机1234;如果是这样的话,请在适当的位置添加\s*。

我希望这能帮到你。

代码语言:javascript
运行
复制
^\+?\d[\d-\.\s]{8,15}\s?((ext|ex|x)\d{3,5})?$
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26755928

复制
相关文章

相似问题

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