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

发布于 2024-12-02 01:11:45 字数 228 浏览 0 评论 0原文

我必须验证一个可以包含从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我早已燃尽 2024-12-09 01:11:45

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

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

先行断言检查字符串中的所有字符是否唯一,而实际的正则表达式仅允许 1 到 7 之间的 0-7 个数字。

在 Java 中:

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

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

This can be done in a single regex:

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

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:

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

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).

热情消退 2024-12-09 01:11:45

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

/^[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

I think you'd have to use two expressions. One to validate the length and digits:

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

and one to tests whether a digit is repeated

/(\d).*\1/

\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]{0,7}$/.test(12345) && !/(\d).*\1/.test(12345)
> true
--
< /^[1-7]{0,7}$/.test(11345) && !/(\d).*\1/.test(11345)
> false
迷爱 2024-12-09 01:11:45

您可以反转检查,即如果它匹配 [^1-7]|.{8}|(.).*\1 那么它是无效的。

You could reverse the check, i.e. if it matches [^1-7]|.{8}|(.).*\1 then it's invalid.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文