Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式验证包含破折号的12位数字字符串_Java_Regex - Fatal编程技术网

Java 使用正则表达式验证包含破折号的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

我需要验证给定的字符串是否包含多达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}| ...)$
使用前瞻,结合两个条件:

^(?=\\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,但我已经做到了:(