regex - 正则表达式验证 10 位电话号码
问题描述
我有一个用例来验证电话号码字段,如果用户输入所有十位数的手机号码,例如(111)111-1111
/ (999)999-9999
,那么我们必须向用户显示一些错误消息。
在这里,我尝试使用此 regex 验证此场景\(([0-9])\1{2}\)\s\1{3}\-\1{4}$
,它正在验证是否存在所有唯一号码,但同时它会为不期望的有效电话号码提供错误。
请分享您对此正则表达式的想法以验证此用例。
解决方案
由于捕获组和反向引用,当所有数字都相同时,您的模式匹配。
如果支持,您可以做的是在否定前瞻断言中使用您的模式,以确保您的模式不会直接出现在右侧,因此没有匹配。
然后您可以使用相同的模式,但随后匹配数字 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$
字符串结束
推荐阅读
- python-3.x - 按截止时间分组观察
- javascript - 如何修复语法错误“错过分号”,但分号在那里?
- vb.net - 使用 vb 在 NotesDatabase.Search 方法中键入不匹配
- javascript - 验证输入邮政编码墨西哥 zippopotam
- c++ - 这些代码之间的区别在哪里?输出不应该一样吗?
- angular - 如何将 Angular 4 Web 应用程序连接到手机摄像头?
- javascript - 字符串的索引
- c# - 使用其 ID 为每个产品创建一个页面
- sql - 根据列值选择多行
- javascript - HTML5 Canvas 在 for 循环中绘制图像集仅绘制最后一次迭代的图像集