首页 > 解决方案 > 正则表达式验证 10 位电话号码

问题描述

我有一个用例来验证电话号码字段,如果用户输入所有十位数的手机号码,例如(111)111-1111/ (999)999-9999,那么我们必须向用户显示一些错误消息。

在这里,我尝试使用此 regex 验证此场景\(([0-9])\1{2}\)\s\1{3}\-\1{4}$,它正在验证是否存在所有唯一号码,但同时它会为不期望的有效电话号码提供错误。

请分享您对此正则表达式的想法以验证此用例。

标签: regex

解决方案


由于捕获组和反向引用,当所有数字都相同时,您的模式匹配。

如果支持,您可以做的是在否定前瞻断言中使用您的模式,以确保您的模式不会直接出现在右侧,因此没有匹配。

然后您可以使用相同的模式,但随后匹配数字 0-9。

请注意,在示例数据中,\s您的模式中的 which 将不匹配。

^(?!\(([0-9])\1{2}\)\1{3}\-\1{4}$)\([0-9]{3}\)[0-9]{3}-[0-9]{4}$
  • ^字符串的开始
  • (?!\(([0-9])\1{2}\)\1{3}\-\1{4}$)否定前瞻断言不匹配仅右侧相同数字的模式
  • \([0-9]{3}\)[0-9]{3}-[0-9]{4}如果断言为真,则相同的模式匹配数字 0-9
  • $字符串结束

正则表达式演示


推荐阅读