【发布时间】:2015-08-14 19:36:08
【问题描述】:
我正在尝试使用 Angular 的 ng-pattern 属性来强制输入框中的文本与特定的正则表达式匹配。我这样做是为了进行表单验证。我正在使用的输入是电话字段。电话字段可以接受 10 位数的电话号码,但我不想要求我的用户使用特定格式,除非它必须在某处包含一个 10 位数的号码。所以这些都是有效的。
- 555-555-5555
- (555) 555-5555
在后端,我将删除所有格式并存储原始数字。过去为此我所做的是删除所有非数字字符,然后确保长度 == 10。这很简单,只需几行代码即可完成,但它是正则表达式可以处理的吗?这不是我曾经试图让正则表达式做的事情。我不想支持特定的格式,因为我不在乎他们是否不小心输入了额外的空格,或者他们是否想像这样输入他们的电话号码:55-55-55-55-55。对我来说真的没关系,我只想让正则表达式匹配,如果字符串中有 10 个数字并且没有更多的数字。
感谢大家的帮助!
【问题讨论】:
-
为什么不允许只允许数字,然后应用一致的格式,例如在这个kendo UI masked textbox 示例中。这样,用户就不必应用格式,而且您始终确切知道您将收到什么格式。
-
对于@stribizhev 的方法,我认为
(\d\D*?){10}更好。 -
不错@Shadowen 我应该考虑做一个重复的捕获组。把它作为答案,我会这样标记它。
-
不幸的是,@stribizhev 是正确的。如果字段中有 > 20 个数字,则正则表达式会在一行中捕获两个单独的组。您将需要一个稍微复杂的正则表达式。