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

我有以下正则表达式:

\+?[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;

我的正则表达式是我在这里寻找的。

如果无法提供正则表达式,则意味着我需要重写我的实体验证实现。那么是否可以将此类条件添加到正则表达式中,或者我是否需要一个函数来验证此类模式?


吃鸡游戏
浏览 228回答 3
3回答

侃侃尔雅

您可以使用^(?=(?:[^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-]+")

慕后森

不使用正则表达式,您可以简单地循环并计算数字和+s:int count = 0;for (int i = 0; i < str.length(); i++) {&nbsp; &nbsp; if (Character.isDigit(str.charAt(i)) || str.charAt(i) == '+') {&nbsp; &nbsp; &nbsp; &nbsp; count++;&nbsp; &nbsp; }}

杨魅力

由于您使用的是 Java,因此我不会仅仅依赖这里的正则表达式:String input = "+123,456.789";int count = input.replaceAll("[^0-9+]", "").length();if (input.matches("^\\+?[0-9.,()\\-\\s]+$") && count >= 9 && count <= 15) {&nbsp; &nbsp; System.out.println("PASS");}else {&nbsp; &nbsp; System.out.println("FAIL");}这种方法允许我们直接使用您的原始正则表达式。我们使用 Java 字符串调用来处理数字(可能还有加号)的长度要求。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java