2013-09-28 30 views
-1

我想验证一个电话号码,该电话号码可以包含10到13位数字,并且可以包含0到3个空格(可以在数据中的任何位置) 。请让我知道如何做到这一点?用于验证13位电话号码的正则表达式是数字,最多可包含3个空格

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

+1

欢迎来到SO。请阅读[关于您可以在此处询问的问题类型](http://stackoverflow.com/help/on-topic)。具体来说:“询问代码的问题必须显示对所解决问题的最低限度理解,包括尝试解决方案,为什么他们不工作以及预期结果。” – us2012

+0

我试过正则表达式^(\ d * \ s){0,3} \ d * $,它能正常工作,但我需要将字符数限制为13个。所以我试过^((\ d * \ s){0 ,3} \ d *){10,13} $但不起作用。我对正则表达式很陌生。 – sdinreach

+0

可能重复的[电话号码验证综合正则表达式](http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) –

回答

0

你想相同的文字对2个不同的整线的模式相匹配。

这是可以实现的或者通过随后的匹配模式:

$ cat file 
1234567 90 
1234567890 
123 456 789
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
$ 

,或者您正则表达式引擎(perl的/的 “grep -P”/ JAVA /等)支持向前看符号 - 模式可以combined

// 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 
+0

弗拉德!感谢您的回答。当我尝试1234 890时,它的匹配,但我想匹配输入至少有10位数字。 – sdinreach

+0

@@ sdinreach,“1234 890”不匹配 - 请参阅http://ideone.com/AEaJdF或粘贴如何应用它的示例 – Vlad

+0

对不起!它是“123456 789”。我想正则表达式匹配至少10个数字,然后允许3个空格。请让我知道如何做到这一点? – sdinreach

相关问题