我正在尝试创建一个正则表达式,其唯一数字用逗号分隔,最大5位,并且数字允许从1到10。例如

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

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

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

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

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

最佳答案

您可以使用

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


参见online regex demo

如果存在重复的相同数字块作为整个单词(用单词边界位置包围),则(?!.*\b(\d+)\b.*\b\1\b)否定超前查找将失败。

请参见Java demo

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代码中省略了模式开头和结尾的^$,因为.matches需要完整的字符串匹配。

09-04 16:23
查看更多