我四处寻找解决问题的方法,但我看不出我的正则表达式的哪一部分无效(javascript说我有一个无效的组)。我想我正在使用javascript正则表达式引擎不支持的东西?
我正在尝试验证以下美国电话号码:
555-555-5555
(555)555-5555
(555) 555-5555
555 555 5555
5555555555
1 555 555 5555
我的验证表达是:
1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})
任何提示?
答案 0 :(得分:9)
/1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})/
在JavaScript中运行良好。
然而,我的水晶球说你正在使用一个你传递给RegExp
构造函数的字符串:
new RegExp("1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})")
这是错误的,因为反斜杠在字符串中有特殊含义,所以
"1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})"
相当于
"1?[s-]?(?(d{3}))?[s-]?(d{3})[s-]?(d{4})"
(因为"\("
是"("
)。这会在(?(
抱怨无效的群组。
解决方案:使用正则表达式文字(/.../
)或将字符串中的反斜杠加倍。
答案 1 :(得分:-1)
你在下面试过吗?
^\([0-9]{3}\)[0-9]{3}-[0-9]{4}$