为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式中某些字符的长度

正则表达式中某些字符的长度

吃鸡游戏 2021-12-10 09:54:24
我有以下正则表达式:\+?[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.777777777(33个字符,只有20个字符(数字和加号)太多了)如果可能,使用正则表达式很重要,因为它在 javax.validation.constraints.Pattern 注释中使用为:@Pattern(regexp = REGEX) private String number;我的正则表达式是我在这里寻找的。如果无法提供正则表达式,则意味着我需要重写我的实体验证实现。那么是否可以将此类条件添加到正则表达式中,或者我是否需要一个函数来验证此类模式?
查看完整描述

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-]+")


查看完整回答
反对 回复 2021-12-10
?
慕后森

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++;

    }

}


查看完整回答
反对 回复 2021-12-10
?
杨魅力

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


查看完整回答
反对 回复 2021-12-10
  • 3 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信