正则表达式至少需要 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位数字,下划线,中划线,字母任意两种混合的密码验证策略

正则二三事

正则检验密码长度6-20位,且至少带字母数字符号中的两种。

10 位或 6 位数字的正则表达式不应以“/”开头和结尾,也可以是字符串中的单个单词 [重复]

正则表达式