3 回答
TA贡献1801条经验 获得超16个赞
您可以使用
^(?=(?:[^0-9+]*[0-9+]){9,15}[^0-9+]*$)\+?[0-9.,()\s-]+$
查看正则表达式演示
细节
^
- 字符串的开始(?=(?:[^0-9+]*[0-9+]){9,15}[^0-9+]*$)
- 正前瞻,其模式必须与正则表达式匹配才能找到匹配项:(?:[^0-9+]*[0-9+]){9,15}
- 9 到 15 次重复[^0-9+]*
- 除数字和+
符号外的任何 0+ 个字符[0-9+]
- 一个数字或+
[^0-9+]*
- 0+ 数字以外的字符和+
$
- 字符串结束\+?
- 可选+
符号[0-9.,()\s-]+
- 1或多个数字,.
,,
,(
,)
,空白和-
字符$
- 字符串的结尾。
在 Java 中,当使用 with 时matches()
,可以省略^
和$
锚点:
s.matches("(?=(?:[^0-9+]*[0-9+]){9,15}[^0-9+]*$)\\+?[0-9.,()\\s-]+")
TA贡献1802条经验 获得超5个赞
不使用正则表达式,您可以简单地循环并计算数字和+s:
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i)) || str.charAt(i) == '+') {
count++;
}
}
TA贡献1811条经验 获得超6个赞
由于您使用的是 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");
}
这种方法允许我们直接使用您的原始正则表达式。我们使用 Java 字符串调用来处理数字(可能还有加号)的长度要求。
添加回答
举报