我需要验证给定的String最多包含12位数字和正好一个短划线。
初始注册: ^[0-9]*-?[0-9]*$
修改后的RegEx: ^([0-9]*-?[0-9]*){1,12}$
示例(应该有效):12356978-9
问题是第一个RegEx不验证长度,第二个不起作用。
注意:一切都必须在正则表达式中完成,而不是使用string.length()检查长度
答案 0 :(得分:2)
丑陋的方式:
^([0-9]-[0-9]{1,11}|[0-9]{2}-[0-9]{1,10}|[0-9]{3}-[0-9]{1,9}| ...)$
使用先行,结合两个条件:
^(?=\\d*-\\d*$)(?=.{1,13}$).*$
(灵感来自this Alan Moore's answer)
答案 1 :(得分:2)
如果你可以使用正则表达式之外的额外条件:
String s = ... ;
return s.length()<=13 && s.matches("^\\d+-\\d+$");
如果破折号可以开始或结束字符串,您可以使用以下内容:
String s = ... ;
return s.length()<=13 && s.matches("^\\d*-\\d*$");