Javascript

时间:2015-09-19 10:19:40

标签: javascript regex

我四处寻找解决问题的方法,但我看不出我的正则表达式的哪一部分无效(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})

任何提示?

2 个答案:

答案 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}$