首页 > 解决方案 > 具有唯一数字的正则表达式

问题描述

我正在尝试创建一个正则表达式,其中唯一数字用逗号分隔,最多 5 位数字,数字允许为 1-10。例如

1,2,3,4,5 - 有效

1,2,2,4,5 - 无效(因为它允许定义重复的数字)

但我想要正则表达式,我们只能输入唯一的数字。我在我的正则表达式下面提到它允许用逗号分隔的数字并允许 1-10 之间的 5 位数字。

^([1-9]|10)(?:,([1-9]|10)){0,4}$

请帮助如何定义这个只允许唯一数字的正则表达式

标签: javaregex

解决方案


您可以使用

^(?!.*\b(\d+)\b.*\b\1\b)(?:[1-9]|10)(?:,(?:[1-9]|10)){0,4}$

查看在线正则表达式演示

(?!.*\b(\d+)\b.*\b\1\b)如果有重复的相同数字块作为整个单词(用单词边界位置括起来),则否定前瞻将失败任何匹配。

请参阅Java 演示

List<String> strs = Arrays.asList("1,2,3,4,5", "1,2,2,4,5");
String rx = "(?!.*\\b(\\d+)\\b.*\\b\\1\\b)(?:[1-9]|10)(?:,(?:[1-9]|10)){0,4}";
for (String str : strs)
    System.out.println(str + ": " + str.matches(rx));

输出:

1,2,3,4,5: true
1,2,2,4,5: false

请注意,Java 代码中省略了模式的开头和结尾处的 and,因为^需要完整的字符串匹配。$.matches


推荐阅读