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 字符串调用来处理数字(可能还有加号)的长度要求。
添加回答
举报
