Java 正则表达式中某些字符的长度
我有以下正则表达式:Java 正则表达式中某些字符的长度,java,regex,Java,Regex,我有以下正则表达式: \+?[0-9\.,()\-\s]+$ 允许: 可选项+开头 然后是数字、点、逗号、圆括号、破折号和空格 除此之外,我还需要确保数字和加号(如果存在)的长度在9到15之间(因此除了加号之外,我不计算任何特殊字符) 这最后一个条件就是我遇到的问题 有效输入: +358(9)1234567 +3 5 8.9,1-2(3)4..5,6.7(25个字符,但仅12个字符可计数(数字和加号)) 无效输入: +3 5 8.9,1-2(3)4..5,6.777(33个字符和仅2
\+?[0-9\.,()\-\s]+$
允许:
- 可选项+开头
- 然后是数字、点、逗号、圆括号、破折号和空格
- +358(9)1234567
- +3 5 8.9,1-2(3)4..5,6.7(25个字符,但仅12个字符可计数(数字和加号))
- +3 5 8.9,1-2(3)4..5,6.777(33个字符和仅20个计数字符(数字和加号)太多)
@Pattern(regexp = REGEX)
private String number;
我要找的就是我的正则表达式
如果无法提供regex,则意味着我需要重写实体验证实现。那么,是否可以将这样的条件添加到正则表达式中,或者我需要一个函数来验证这样的模式?您可以使用
^(?=(?:[^0-9+]*[0-9+]){9,15}[^0-9+]*$)\+?[0-9.,()\s-]+$
见
详细信息
-字符串的开头^
-一种正向前瞻,其模式必须匹配正则表达式才能找到匹配项:(?=(?:[^0-9+]*[0-9+]){9,15}[^0-9+]*$)
-9到15次重复(?:[^0-9+]*[0-9+]){9,15}
-除数字和[^0-9+]*
符号以外的任何0+字符+
-数字或[0-9+]
+
-0+字符,数字和[^0-9+]*
+
-字符串结尾$
-可选的\+?
符号+
-1个或多个数字,[0-9.,()\s-]+
,,
,
,(
,空格和)
字符-
-字符串结束$
matches()
一起使用时,可以省略^
和$
锚定:
s.matches("(?=(?:[^0-9+]*[0-9+]){9,15}[^0-9+]*$)\\+?[0-9.,()\\s-]+")
不使用正则表达式,您可以简单地循环和计数数字和
+
s:
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i)) || str.charAt(i) == '+') {
count++;
}
}
int count=0;
对于(int i=0;i
既然您使用的是Java,我不会在这里完全依赖正则表达式:
String input = "+123,456.789";
int count = input.replaceAll("[^0-9+]", "").length();
if (input.matches("^\\+?[0-9.,()\\-\\s]+$") && count >= 9 && count <= 15) {
System.out.println("PASS");
}
else {
System.out.println("FAIL");
}
String input=“+123456.789”;
int count=input.replaceAll(“[^0-9+]”,“”)。length();
if(input.matches(“^\\+?[0-9.,()\\-\\s]+$”)&&count>=9&&count您能否提供与正则表达式匹配的可能输入?什么符号与数字一起计数以达到9到15之间的计数?@Rab正则表达式可以是特定于语言的,因此我不确定删除Java标记是否是一个好的选择。@TimBiegeleisen在beginning@WiktorStribiżew最终,我决定采用不同的方法,实现新的注释,而不是使用正则表达式,但您的答案正是我在这里寻找的答案。感谢您的详细回答。答案不错,但在Java代码库的上下文中,对于不擅长使用正则表达式的人来说,这么长的模式可能很难维护。