当前位置: 首页 > 知识库问答 >
问题:

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

狄子真
2023-03-14

我有以下正则表达式:

\+?[0-9\.,()\-\s]+$

这允许:

  • 开头可选
  • 然后是数字、点、逗号、圆括号、破折号和空格。

除此之外,我需要确保数字和加号(如果存在)的长度在9到15之间(所以我不计算符号之外的任何特殊字符)。

最后一个条件是我有问题的地方。

有效输入:

  • 358(9)1234567

无效输入:

  • 3.5 8.9,1-2(3)4.5,6.77777(33个字符,只有20个计数字符(数字和加号)太多)

如果可能的话,使用正则表达式很重要,因为它在javax.validation.constraints中使用。图案注释为:

@Pattern(regexp = REGEX) 
private String number;

我的REGEX是我在这里寻找的。

如果不能提供正则表达式,则意味着我需要重写实体验证实现。那么,有没有可能将这样的条件添加到正则表达式中,或者我需要一个函数来验证这样的模式?

共有3个答案

沈健
2023-03-14

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

曹经业
2023-03-14

不使用正则表达式,您可以简单地循环和计数数字和:

int count = 0;
for (int i = 0; i < str.length(); i++) {
    if (Character.isDigit(str.charAt(i)) || str.charAt(i) == '+') {
        count++;
    }
}
孟楷
2023-03-14

您可以使用

^(?=(?:[^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个字符,数字和李除外
    • $字符串结束

    \ ? -可选的符号

    在Java中,当与matches()一起使用时,可以省略^$锚定:

    s.matches("(?=(?:[^0-9+]*[0-9+]){9,15}[^0-9+]*$)\\+?[0-9.,()\\s-]+")
    

  •  类似资料:
    • 问题内容: 我使用以下正则表达式而不限制任何字符长度 在上面,当我尝试将字符长度限制为如下所示的15个时,会引发错误。 请帮助我使上述regEx的字符数限制为15。 问题答案: 您不能将量词应用于锚点。相反, 要限制输入字符串的长度,请 在开头使用锚定先行: 另外,我假设您想将0个或多个字母或数字与匹配。它应该看起来像(即在此处使用字符类)。 为什么不最后使用限制量词,例如? 量词仅应用于左侧的子

    • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

    • 问题内容: 我刚刚编写了一个与php函数一起使用的正则表达式,其中包含以下部分: 匹配任何单词字符,以及减号和点。虽然它似乎可以在preg_match中工作,但我尝试将其放入名为Reggy的实用程序中,并且它抱怨 “ char类的空范围” 。反复试验告诉我,这个问题已通过转义减号,将正则表达式转换为 由于原始版本似乎可以在PHP中运行,所以我想知道为什么还是应该转义减号,并且-因为点也是PHP中具

    • 主要内容:实例下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或

    • 我想提取所有“like string”,即。 像“%”12548“%” 例如“%” 例如“%” 例如“%” 例如“%” 我在java当我获取组时,它不会返回正确的结果。请建议。

    • 我想为C中的一些字符串创建一个正则表达式。 这就是我目前的情况: C中的字符串由双引号(")分隔,因此正则表达式必须由 \" \". 字符串可能不包含换行符,因此我需要执行[^\n](我想)。 字符串还可能包含双引号或反斜杠字符,如果且仅当它们被转义时。因此[\\\”](我想也是这样)。 除此之外,什么都可以。 任何帮助是非常感谢我有点迷失了如何开始写这个正则表达式。