Java Regex允许数字之间有空格,或者在第一个数字之前没有空格

Java Regex允许数字之间有空格,或者在第一个数字之前没有空格,java,regex,spring,Java,Regex,Spring,我有下面的方法-verifyPhones,我在上面使用了两个正则表达式。 第一个是确定字符串是否有效,如果无效,我需要搜索哪些数字无效 我的问题是,当我同时拥有两个有效数字时-2025550125202550125,系统只会将其中一个返回为错误,而不是返回整个字符串 如何改进正则表达式以实现这一目标? 提前谢谢 有效数字的定义: 任何有9个数字的数字,由字符分隔或不分隔- 例如: 000-000-0000 000111000 这是我的密码: public static String verif

我有下面的方法-
verifyPhones
,我在上面使用了两个正则表达式。 第一个是确定字符串是否有效,如果无效,我需要搜索哪些数字无效

我的问题是,当我同时拥有两个有效数字时-
2025550125202550125
,系统只会将其中一个返回为错误,而不是返回整个字符串

如何改进正则表达式以实现这一目标?
提前谢谢

有效数字的定义:

任何有9个数字的数字,由字符分隔或不分隔
-

例如:

000-000-0000

000111000

这是我的密码:

 public static String verifyPhones(String phones) {
    Pattern patternValidAllPhones = Pattern.compile("^(((\\d{3}[-]?){2}\\d{4})[ ]+)+$");
    Pattern patternToFindWrongPhones = Pattern.compile("([ ]+((\\d{3}[-]?){2}\\d{4})[ ]+)");

    phones = phones.replaceAll("\\r", " ").replaceAll("\\n", " ").concat(" ");
    Matcher matcherValidAllPhones = patternValidAllPhones.matcher(phones);

    if(!matcherValidAllPhones.matches()) {
      Matcher matcherToFindWrongPhones = patternToFindWrongPhones.matcher(phones);
      return matcherToFindWrongPhones.replaceAll("").trim();
    }

    return "";
  }
以下是我的建议:

如果有效数字之间必须用空格分隔,则可以首先将字符串按空格分割为若干段,其中每一段都将是一个数字。然后分别在每一块上应用验证模式。那些与模式不匹配的片段将是无效的数字

下面是一个例子:

private static final Pattern phonePattern=Pattern.compile(“(\\d{3}[-]){2}\\d{4}”);
公共静态列表验证电话(字符串电话){
字符串[]数字=电话。拆分(\\s+);
列出错误的电话=新建ArrayList();
用于(字符串编号:数字){
如果(!phonePattern.matcher(number.matches()){
错误的电话。添加(号码);
}
}
归还错误的电话;
}

注意:我已经更改了方法的签名。现在它返回一个错误数字的列表。您不希望总是只有一个无效号码,是吗?

什么是“有效电话”的定义?9个号码之间是否用-例如:111-111-1111 0005559999分隔,但它们与空格或换行符一起出现示例:111-111-1111 0005559999 111-111-1111\\n111-111-1111 Obs.:换行符,我正在删除之前的内容并替换为空格。正如我所看到的,如果是有效字符串,其中的数字必须用空格分隔,这是真的吗?是的,它是。如果数字之间没有空格,那么它是无效的。因此,在验证前,我会将\\n替换为空格。不,我可以有多个,这样更好。谢谢,我被困在正则表达式中,我没有看到其他解决方案。
@Test
  public void verifyPhonesTest_whenInvalidPhones_thenReturneInvalidPhones() {

    String invalidPhones1 = "202-555*0125 202-555-0125 202-555-0125 202-555-0125";
    String invalidPhones2 = "202-555-0125202-555-0125 202-555-0125 202-555-0125";
    String invalidPhones3 = "202555*0125 202-555-0125 202-555-0125 202-555-0125";
    String invalidPhones4 = "2025550125 20255501252025550125";

    String result1 = PhonesService.verifyPhones(invalidPhones1);
    String result2 = PhonesService.verifyPhones(invalidPhones2);
    String result3 = PhonesService.verifyPhones(invalidPhones3);
    String result4 = PhonesService.verifyPhones(invalidPhones4);

    assertFalse(result1.isEmpty());
    assertEquals("202-555*0125", result1);

    assertFalse(result2.isEmpty());
    assertEquals("202-555-0125202-555-0125", result2);

    assertFalse(result3.isEmpty());
    assertEquals("202555*0125", result3);

    assertFalse(result4.isEmpty());
    assertEquals("20255501252025550125", result4);
  }