JavaScript中,正则表达式来验证电话号码

问题描述:

我要验证电话号码,格式为XXXX-XXX-XXXXJavaScript中,正则表达式来验证电话号码

var phone= prompt("Enter phonenumber in the format X-XXX-XXX-XXXX"); 
    var regEx= /\d-[\ddd\-]{2}\d{4}/; 
    if(regEx.test(phone)) 
    {document.write("Is valid PhoneNumber "+phone);} 
    else{ 
    var msg= "Chaphert 6 exmaple 2a says <br/>" +phone +" is invalid"; 
    alert(msg); 
    } 

我可以用regEx=/\d-\d{3}-\d{3}-\d{4},这将解决我的问题,但因为我有重复这个xxx-xxx-,即我不希望在正则表达式中重复两次\d{3}-,期望用\ d {3} - \ d {3}替代某些东西,例如[\ d {3} - ] {2} 。我将不胜感激任何帮助。

+2

'^ \ d( - \ d {3}){3} \ d $'? –

+0

什么是'[\ ddd \ - ]'应该是什么意思?您是否在正则表达式测试网站上查看此正则表达式?你知道'[]'(字符集)和'()'组之间的区别吗?无论如何,你的原始正则表达式更清晰,没有理由进一步摆弄它。 – 2016-07-31 14:38:09

+0

为什么你不想重复'\ d {3}'?这就清楚了你实际想要匹配的底层结构是什么。它更易于阅读和维护。 – 2016-07-31 14:57:26

感谢您的帮助,我需要进行分组 即

var phone= prompt("Enter phonenumber in the format X-XXX-XXX-XXXX"); 
    var regEx= /\d-(\d{3}\-){2}\d{4}/; 
    if(regEx.test(phone)) 
     {alert("Is valid PhoneNumber "+phone);} 
    else{ 
    var msg= "Entered phone number " +phone +" is invalid"; 
    alert(msg); 
    } 

解决我的问题替换[]与(),它的工作如预期的那样

下面的正则表达式应该做什么你问:

^\d(?:-\d{3}){3}\d$ 

DEMO

+0

这个正则表达式的工作原理,但它隐藏了1-3-3-4结构。 – 2016-07-31 14:40:37

+1

是的,但那是什么问题? –

如果你想显示的1-3-3-4结构的模式,并要防止使用

'-\d{3}' 

两次,你可以把这部分放到一个组中并重复两次。

最终模式应该是这样的,那么:

'^\d-(\d{3}-){2}\d{4}$' 
+0

感谢它的工作我是混合两种语言分组的Java和JavaScript – Manoj