-1

我想验证一个电话号码,它可以包含 10 到 13 位数字,并且可以包含 0 到 3 个空格(可以在数据中的任何位置出现)。请让我知道该怎么做?

我尝试使用^(\d*\s){0,3}\d*$正常的正则表达式,但我需要将字符总数限制为 13。

4

1 回答 1

0

您希望将相同的文本与 2 个不同的整行模式匹配。

因此,可以通过匹配模式来实现:

$ cat file
1234567 90
1234567890
123 456 789 0123
123 456 789 01 23
$ sed -rn '/^([0-9] ?){9,12}[0-9]$/{/^([0-9]+ ){0,3}[0-9]+$/p}' file
1234567890
123 456 789 0123
$

或者,如果您的正则表达式引擎 (perl/"grep -P"/java/etc) 支持前瞻 - 可以组合模式:

// This is Java
Pattern p = Pattern.compile("(?=^([0-9] ?){9,12}[0-9]$)(?=^([0-9]+ ){0,3}[0-9]+$)^.*$");
System.out.println(p.matcher("1234567 90").matches());        // false
System.out.println(p.matcher("123 456 789 0123").matches());  // true
System.out.println(p.matcher("123 456 789 01 23").matches()); // false
于 2013-09-29T05:49:57.523 回答