我需要根据给定条件验证输入,
- 总长度必须为 20 个字符 -前五个位置必须是字母 -剩余应该是数字,但必须存在一个连字符(-),该连字符只能出现在数字之间。 我有像这样的正则表达式
([a-zA-Z]){5}[0-9]+([-]){15}
但它也允许在末尾使用连字符,甚至接受不带连字符的情况。
最佳答案
你可以使用
^[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+$
请参阅 regex demo 。
详细信息:
^
- 匹配字符串的开头[a-zA-Z]{5}
- 匹配 5 个字母(?=[0-9-]{15}$)
- 要求字符串的其余部分长度应为 15 个字符[0-9]+-[0-9]+
- 1+ 数字后跟连字符,后跟 1+ 数字$
- 字符串结尾(您可以替换为\z
以排除字符串末尾最后一个换行符之前的匹配)
如果您使用.matches()
,您可以省略外部 anchor 。
参见 Java test:
String pat = "[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+";
System.out.println("abcde123456-89012345".matches(pat)); // true
System.out.println("abcde-12345689012345".matches(pat)); // false
System.out.println("abcde12345689012345-".matches(pat)); // false
System.out.println("abcde12345689012345-12".matches(pat)); // false
关于Java正则表达式最大长度与一个连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36839935/