我正在尝试制作一个仅接受列出格式的电话号码的正则表达式。但是,如果我用右括号结束第一个三位数组,而在开始时没有左括号,则当我希望它返回 false 时,测试将返回 true。我能做什么?
1 555-555-5555
1 (555) 555-5555
1(555)555-5555
1 555 555 5555
5555555555
555-555-5555
(555)555-5555
const validNumbers = /^[1]? ?[(]?[0-9]{3}[)]?\s?[0-9]{3}[-\s]?[0-9]{4}$/i
console.log(validNumbers.test("1 305) 9759003"))
如果您只想在得到左括号时匹配右括号,则必须区分两种模式:
生成的正则表达式如下所示:
const validNumbers = /^[1]? ?([(][0-9]{3}[)]|[0-9]{3})\s?[0-9]{3}[-\s]?[0-9]{4}$/i
Regex 无法“记住”它之前是否找到了括号。这就是为什么你必须明确区分这两种情况。
对于您的测试字符串,我们得到以下内容:
>>> console.log(validNumbers.test("1 305) 9759003"))
false
>>> console.log(validNumbers.test("1 (305) 9759003"))
true