我正在尝试创建一个正则表达式,其唯一数字用逗号分隔,最多5位数字,并且允许1-10之间的数字。例如
1,2,3,4,5-有效
1,2,2,4,5-无效(因为它允许定义重复的数字)
但是我想要一个只能输入唯一数字的正则表达式。 我在正则表达式下面提到的是允许逗号分隔的数字,并允许1-10之间的5位数字。
^([1-9] | 10)(?:,([1-9] | 10)){0,4} $
请帮助定义该仅包含唯一数字的正则表达式
答案 0 :(得分:1)
您可以使用
^(?!.*\b(\d+)\b.*\b\1\b)(?:[1-9]|10)(?:,(?:[1-9]|10)){0,4}$
如果整个单词重复相同的数字块(用单词边界位置包围),则(?!.*\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
需要完整的字符串匹配。