gpt4 book ai didi

regex - 用于匹配不同长度的多个范围的正则表达式

转载 作者:行者123 更新时间:2023-12-02 08:36:03 24 4
gpt4 key购买 nike

我需要验证用户输入的值是否为以下值之一:

  • 7 位数字,范围从 7000000 到 7999999
  • 范围为 777000000 - 777777777 的 9 位数字
  • 范围为 77700000000 - 77777777777 的 11 位数字

到目前为止,我所拥有的似乎有效的是:^7\d{7}|777\d{7}|777\d{9}$

但是,由于我是正则表达式的新手,所以我想确认这是否是最有效的方法。

提前致谢!

最佳答案

不正确

  1. 由于 | 的优先级低于串联,您的模式被解析为:

    ^7\d{7}
    |
    777\d{7}
    |
    777\d{9}$

    anchor 仅适用于第一个和最后一个子模式。

  2. 另一件事是“7 位数字范围从 7000000 - 7999999”意味着它有 6 个空闲数字,而不是指定的 7 7\d{7}。其他子模式也有相同的差一错误。

  3. 由于您在 777000000 - 777777777 范围内不允许使用 777999999,因此您的正则表达式将不如 777\d{6} 方便(如果您想要用正则表达式做所有事情)。

    要匹配范围 777000000 - 777777777,您需要:

    777(?:[0-6]\d{5}|7(?:[0-6]\d{4}|7(?:[0-6]\d{3}|7(?:[0-6]\d{2}|7(?:[0-6]\d|7[0-7])))))

    它匹配前缀 777,然后是后缀(按顺序):

    • 000000 - 699999
    • 700000 - 769999
    • 770000 - 776999
    • 777000 - 777699
    • 777700 - 777769
    • 777770 - 777777

    (我假设你要匹配777000009)

解决方案

解决第一个和第二个问题很简单,只需要非捕获组 (?:pattern) 并调整重复次数:

^(?:7\d{6}|777\d{6}|777\d{8})$

然而,第三个问题仅靠正则表达式是不容易解决的(有可能,但你最终会得到一堆代码)。

按照建议,将文本解析为数字并使用它会更容易。 11 位数字可以适合 64 位整数类型(尽可能使用整数类型),或 double float (如果您使用 JavaScript,数字由 double float 表示,具有 53 位精度).

关于regex - 用于匹配不同长度的多个范围的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284730/

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