使用正则表达式验证包含短划线的数字12位数字符串

时间:2016-11-18 12:58:22

标签: java regex

我需要验证给定的String最多包含12位数字和正好一个短划线。

初始注册: ^[0-9]*-?[0-9]*$

修改后的RegEx: ^([0-9]*-?[0-9]*){1,12}$

示例(应该有效):12356978-9

问题是第一个RegEx不验证长度,第二个不起作用。

注意:一切都必须在正则表达式中完成,而不是使用string.length()检查长度

2 个答案:

答案 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*$");