gpt4 book ai didi

javascript - 了解区号电话的 RegExp

转载 作者:行者123 更新时间:2023-11-30 07:53:54 25 4
gpt4 key购买 nike

我正在尝试了解和了解有关电话号码(尤其是区号)的 RegExp 的更多信息。大多数情况下,区号是这样的:(345)345 其中的 RegExp 代码为:

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

但是有什么方法可以确保如果输入 (345345),则它返回不匹配或返回 false?

我能理解的是:

  • ^ ... $ - 是字符串的开头和结尾
  • () - 是第一个捕获的组
  • \( - 在第一个捕获组中找到并在字符串中查找“(”
  • ? - 我不确定这是什么,但我认为它标志着第一个捕获组的结束?
  • \d{3} - 查找数字(数字)但按 3 位数字的顺序
  • (\)) - 第二个捕获组并在字符串中查找“)”

总而言之,我要求解释 ? 以及如果测试 (345345) 如何返回不匹配。

最佳答案

? 使正则表达式中紧接在前面的标记成为可选的。你应该把它去掉强制括号,但由于你还需要匹配不带括号的区号,你可以使用 | 指定 OR 大小写。

生成的正则表达式看起来像

^((\()\d{3}(\))|\d{3})$

如果您不需要将括号本身捕获到,您可以简化它:

^(\(\d{3}\)|\d{3})$

let r = /^(\(\d{3}\)|\d{3})$/

console.log(r.test('555')) // true
console.log(r.test('(555)')) // true
console.log(r.test('(555')) // false
console.log(r.test('555)')) // false

我把整个东西放在一个捕获组中的原因是这样可以在它周围添加独立测试,例如,使区号可选并期望由可选的 - 分隔的另外 7 个数字在第 3 个数字之后。

let r = /^(\(\d{3}\)|\d{3})?\d{3}-?\d{4}$/

console.log(r.test('5555555')) // true
console.log(r.test('555-5555')) // true
console.log(r.test('5555555555')) // true
console.log(r.test('(555)5555555')) // true
console.log(r.test('(555)555-5555')) // true
console.log(r.test('(5555555555')) // false
console.log(r.test('555)5555555')) // false

关于javascript - 了解区号电话的 RegExp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45620551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com