Java 使用正则表达式验证包含破折号的12位数字字符串
我需要验证给定的字符串是否包含多达12位数字和一个破折号 初始正则表达式:Java 使用正则表达式验证包含破折号的12位数字字符串,java,regex,Java,Regex,我需要验证给定的字符串是否包含多达12位数字和一个破折号 初始正则表达式:^[0-9]*-?[0-9]*$ 修改的正则表达式:^([0-9]*-?[0-9]*){1,12}$ 示例(应有效):12356978-9 问题是第一个正则表达式不能验证长度,而第二个正则表达式不起作用 注意:所有操作都必须在正则表达式中完成,而不是使用string.length()检查长度。丑陋的方式: ^([0-9]-[0-9]{1,11}|[0-9]{2}-[0-9]{1,10}|[0-9]{3}-[0-9]{1,9
^[0-9]*-?[0-9]*$
修改的正则表达式:^([0-9]*-?[0-9]*){1,12}$
示例(应有效):12356978-9
问题是第一个正则表达式不能验证长度,而第二个正则表达式不起作用
注意:所有操作都必须在正则表达式中完成,而不是使用string.length()检查长度。丑陋的方式:
^([0-9]-[0-9]{1,11}|[0-9]{2}-[0-9]{1,10}|[0-9]{3}-[0-9]{1,9}| ...)$
使用前瞻,结合两个条件:
^(?=\\d*-\\d*$)(?=.{1,13}$).*$
(灵感来源于)丑陋的方式:
^([0-9]-[0-9]{1,11}|[0-9]{2}-[0-9]{1,10}|[0-9]{3}-[0-9]{1,9}| ...)$
使用前瞻,结合两个条件:
^(?=\\d*-\\d*$)(?=.{1,13}$).*$
(灵感来源)如果您可以在正则表达式之外使用额外条件:
String s = ... ;
return s.length()<=13 && s.matches("^\\d+-\\d+$");
字符串s=;
如果可以在正则表达式之外使用额外条件,则返回s.length():
String s = ... ;
return s.length()<=13 && s.matches("^\\d+-\\d+$");
字符串s=;
返回s.length(),如果您给出一些要比较的示例字符串,那就好了。破折号后是否只有一个数字?123465789-10有效,123456789-1011因长度而无效,123465789因其字符串s=…(代码>字符串s=)中的某个字符中没有破折号而无效;返回s.length()@Seth您更改了问题。没有人说没有破折号是可以接受的解决方案!如果你给出一些你想比较的字符串的例子,那就好了。破折号后面会只有一个数字吗?123465789-10是有效的,123456789-1011是无效的,因为长度,123465789是无效的,因为它沿着字符串s=;返回s.length()@Seth您更改了问题。没有人说没有破折号是可以接受的解决方案!你知道如何在纯正则表达式中实现吗?是的,你可以实现@JiriTousek的解决方案。可读性不强,但可以胜任。这并不意味着没有解决方案,只是如果有,除了Jiri Tusek,我不知道。你知道如何在纯正则表达式中实现吗?是的,你可以实现@JiriTousek的解决方案。可读性不强,但可以胜任。这并不意味着没有解决办法,只是如果有,除了Jiri Tusek,我不知道。第二个答案应该是公认的答案。如果可以的话,我会再次+1,但我已经做到了:(第二个应该是公认的答案。如果可以的话,我会再次+1,但我已经做到了:(