如何验证字符串中字符的重复

时间:2011-08-29 09:56:05

标签: regex unique repeat

我必须验证一个字符串,该字符串可以包含1到7之间的数字,并且允许的最大长度为7.

([1-7]){0,7}

条件:字符串中不应重复数字。

例如:

12345  true;
11345  false  (1 is repeated) ;
98014  false  (0,8,9 are invalid); 

3 个答案:

答案 0 :(得分:3)

这可以在一个正则表达式中完成:

^(?!.*(.).*\1)[1-7]{0,7}$

前瞻断言检查字符串中的所有字符是否唯一,而实际的正则表达式只允许0到7位数在1和7之间。

在Java中:

boolean foundMatch = subjectString.matches("^(?!.*(.).*\\1)[1-7]{0,7}$");

当然,您可以使用.替换每个[1-7],从而使前瞻失败更快,但为了清楚起见,我选择不这样做。 (如果您使用^方法,则可以删除$.matches()锚点,因为在这种情况下它们是隐含的。)

答案 1 :(得分:2)

我认为你必须使用两个表达式。一个用于验证长度和数字:

/^[1-7]{0,7}$/

和一个测试是否重复数字

/(\d).*\1/

\1是对第一个捕获组的值的引用。

通过两者的组合,您可以验证字符串。 JavaScript中的示例:

< /^[1-7]{0,7}$/.test(12345) && !/(\d).*\1/.test(12345)
> true
--
< /^[1-7]{0,7}$/.test(11345) && !/(\d).*\1/.test(11345)
> false

答案 2 :(得分:1)

您可以撤销支票,即如果它与[^1-7]|.{8}|(.).*\1匹配则检查无效。