【问题标题】:REGEX To accept numbers separated by commas, but number range is 0-32767REGEX 接受以逗号分隔的数字,但数字范围是 0-32767
【发布时间】:2011-09-09 20:19:27
【问题描述】:

我需要写一个正则表达式来接受这样的输入

23,456,22,1,32767

  1. 开头或结尾不允许使用逗号。
  2. 空格可能出现在逗号之前和/或逗号开头,例如23、45、56、67 等
  3. 每个数字的范围应为 0-32767。

目前我正在使用像这样的正则表达式[0-9]+(,[0-9]+)*

这允许数字只用逗号分隔(根本不允许空格),并且它不检查数字的范围。

【问题讨论】:

标签: regex numbers expression range spaces


【解决方案1】:

分两步完成可能是明智之举。首先检查范围是0-99999:

^[0-9]{1,5}( *, *[0-9]{1,5})*$

然后使用通用编程语言将字符串解析为整数列表,并检查每个整数 x 的 x <= 32767

【讨论】:

  • +1,但您可能需要在逗号周围添加 \s*,以便按照 Basmah 的要求留出空格。
  • “\s*”还是“*”?这个问题在这一点上似乎很不清楚。
  • 谢谢马克!这很有帮助!
  • 马克,你能告诉我 th 的正则表达式来编写一个正则表达式来获取像这样的输入 23,456,22,1,32767 即 1. 开头或结尾不允许逗号。 2.空格可能出现在逗号之前和/或逗号开头,例如23、45、56、67 等跟随
  • 为了接受以逗号分隔且中间没有空格的数字,我应该对此进行哪些更改?
【解决方案2】:

可以使用正则表达式验证数字范围,但由于您需要查看数字的文本表示,因此正则表达式将难以阅读:

0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9])

匹配 0 到 32767 之间的整数,前导零可选。

所以你的整个正则表达式将是

^0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9])(?: *, *0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]))*$

现在假设您从多年前离开您公司的同事那里继承了该正则表达式...玩得开心:)

因此,听从马克的建议。

这个答案纯粹是为了教育目的,构成在这种情况下使用正则表达式的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多