如何验证字符串中字符的重复
我必须验证一个可以包含从 1 到 7 的数字的字符串,允许的最大长度为 7。
([1-7]){0,7}
条件:字符串中不应有重复的数字。
例如:
12345 true;
11345 false (1 is repeated) ;
98014 false (0,8,9 are invalid);
I have to validate a string which can contain numbers from 1 to 7, and maximum length allowed is 7.
([1-7]){0,7}
Condition: No numbers should be repeated in the string.
eg:
12345 true;
11345 false (1 is repeated) ;
98014 false (0,8,9 are invalid);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这可以在单个正则表达式中完成:
先行断言检查字符串中的所有字符是否唯一,而实际的正则表达式仅允许 1 到 7 之间的 0-7 个数字。
在 Java 中:
当然,您可以通过以下方式使先行失败更快将每个
.
替换为[1-7]
,但为了清楚起见,我选择不这样做。 (如果使用.matches()
方法,则可以删除^
和$
锚点,因为在这种情况下它们是隐式的)。This can be done in a single regex:
The lookahead assertion checks that all characters in the string are unique, and the actual regex only allows 0-7 digits between 1 and 7.
In Java:
Of course you can make the lookahead fail faster by replacing each
.
with[1-7]
, but for clarity's sake I've chosen not to. (And you can drop the^
and$
anchors if you use the.matches()
method since they are implicit in that case).我认为你必须使用两种表达方式。一个用于验证长度和数字:
另一个用于测试数字是否重复
\1
是对第一个捕获组的值的引用。通过两者的组合,您可以验证字符串。 JavaScript 中的示例:
I think you'd have to use two expressions. One to validate the length and digits:
and one to tests whether a digit is repeated
\1
is a reference to the value of the first capture group.With the combination of both, you can validate the string. Example in JavaScript:
您可以反转检查,即如果它匹配
[^1-7]|.{8}|(.).*\1
那么它是无效的。You could reverse the check, i.e. if it matches
[^1-7]|.{8}|(.).*\1
then it's invalid.