正则表达式至少需要 6 位数字,但数字可以在任何地方 [重复]
Posted
技术标签:
【中文标题】正则表达式至少需要 6 位数字,但数字可以在任何地方 [重复]【英文标题】:Regex needs to be a minimum of 6 digits but the digits could be anywhere [duplicate] 【发布时间】:2019-06-05 14:25:02 【问题描述】:我只想允许数字、空格和这些字符: \ + ( )
我希望它至少为 6 个数字。数字可以在字符串中的任意位置。
这是我能得到的最接近的:
^(?=.6,)[0-9\-\+\(\\) ]*$
我的代码除了至少 6 位数的要求外有效。 (它只强制至少 6 个字符。)
输入不应该匹配的文本:
+()1234
应匹配的输入文本:
+(44) 78666-05529
【问题讨论】:
你可以使用@"^(?=(?:\D*\d)6)[-0-9+()\\ ]*$"
,见this regex demo in .NET regex tester。或者,使用^[-+()\\ ]*(?:[0-9][-+()\\ ]*)6,$
。见another regex demo。
我认为有两个更好的解决方案,但我不能发布它们,因为这个问题现在被锁定了。第一个可以是tried online,第二个是使用libphonenumber而不是自制算法来检查电话号码..
【参考方案1】:
您当前的前瞻 ^(?=.6,)
断言后面的内容是字符串开头任何字符的 6 倍或更多倍。
如果数字可以在字符串中的任何位置,您必须使用正向超前和非捕获组(?:.*[0-9])6
断言一个数字 6 次。
请注意,这不考虑示例数据中数字的确切格式。
^(?=(?:.*[0-9])6)[0-9\-+(\\) ]*$
Regex demo
【讨论】:
以上是关于正则表达式至少需要 6 位数字,但数字可以在任何地方 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
java密码正则表达式(可以是纯数字,也可以是纯字母,也可以是数字+字母,6-16 位)
正则表达式验证6~30位数字,下划线,中划线,字母任意两种混合的密码验证策略