正则表达式查找具有唯一数字的数字

我想找到没有重复数字的10位数字,例如:

1123456789 //fail, there are two 1's 6758951230 //fail, there are two 5's 6789012345 //pass, each digit occurs once only. 

目前我正在使用正则表达式,但只能匹配10个数字(它不会检查重复。我正在使用这个正则表达式:

 [0-9]{10} 

这可以用正则表达式完成还是有更好的方法来实现这一目标?

这个正则表达式有效:

 ^(?!.*(.).*\1)\d{10}$ 

这使用了一个锚定的负面向前看,后面引用断言没有重复的字符。

查看使用示例的实时演示 。

在java中:

 if (str.matches("^(?!.*(.).*\\1)\\d{10}")) // number passes 

这是最短,最有效的正则表达式,由于存在一个?

适用于任何长度的输入:

 !/(.).*?\1/.test(number) 

例子:

 !/(.).*?\1/.test(1234567890) // true !/(.).*?\1/.test(1234567490) // false - note that it also works for repeated chars which are not adjacent. 

演示
– 检查重复的数字
– 与你想要的相反,因为rubular不允许!

lancemanfv正则表达式参考https://stackoverflow.com/a/12870549/1366360是一个很棒的,但建议的正则表达式略有偏差。

相反,试试

 ^(?:([0-9])(?!.*\1)){10}$ 

这将匹配任何以10位数字开头和结尾的字符串。

如果要检查(并提取)长字符串是否包含10位数字,每个数字不同,请使用此字符

 ((?:([0-9])(?!.*\2)){10})* 

然后,您可以使用带编号的引用来提取匹配的数字

试试这个(?:([0-9])(?!.*\1)){10} ,如果您一次validation一个数字,这将有效。

这应该工作(?:([0-9])(?!\d*\1)){10}来搜索每个10位数序列的出现,但它会失败12345678901234567890 ,会找到最后一个有效部分1234567890而不是忽略它。

来源和解释: https : //stackoverflow.com/a/12870549/1366360

每次都有效(我看到这个问题) –

修改为在(?! \10 )断言之前定义Grp 10。 \ 1- \ 9始终被视为backrefs(> \ 10,parenth必须在引用之前)。
所以他们也一样。

注意 – 这可用于查找浮动(子串)10字节数字。 不需要锚点。
Fyi – 使用Perl,无论组号是多少,都可以在定义组之前使用\g{#} (或\k'name' )语法。

  # "(?:((?!\\1)1)|((?!\\2)2)|((?!\\3)3)|((?!\\4)4)|((?!\\5)5)|((?!\\6)6)|((?!\\7)7)|((?!\\8)8)|((?!\\9)9)|((?!\\10)0)){10}" (?: ( # (1) (?! \1 ) 1 ) | ( # (2) (?! \2 ) 2 ) | ( # (3) (?! \3 ) 3 ) | ( # (4) (?! \4 ) 4 ) | ( # (5) (?! \5 ) 5 ) | ( # (6) (?! \6 ) 6 ) | ( # (7) (?! \7 ) 7 ) | ( # (8) (?! \8 ) 8 ) | ( # (9) (?! \9 ) 9 ) | ( # (10) (?! \10 ) 0 ) ){10}