【问题标题】:regular expression for csv numbers from 1 to 1000 [closed]从 1 到 1000 的 csv 数字的正则表达式
【发布时间】:2012-10-16 06:59:59
【问题描述】:

我需要一个正则表达式,它可以匹配从 1 到 1000 以逗号分隔的一串数字。

例如:12,56,100,190,900,1000

我在前端使用 javascript,在后端使用 php 进行验证。理想情况下,我需要一个通用的正则表达式,它对两者都适用。

【问题讨论】:

  • 这不是问题。你想做什么?什么不工作?
  • 另外请添加更多信息:您使用的是哪种语言?为什么是正则表达式而不是 CSV 解析器?
  • 我只需要在 html 字段中允许 1 到 1000 之间的数字,用逗号分隔
  • 是的,您之前说过(除了 HTML 位 - that 与它有什么关系?HTML 和 CSV 是两个非常不同的概念)。不过,你没有回答我们的问题。请提供更多信息。
  • 我正在使用正则表达式,因为我需要它来允许在 html 字段中用逗号分隔 1 到 1000 的值

标签: php javascript regex


【解决方案1】:

1-1000 范围内的数字,以逗号分隔,匹配

(?<=,|^)([1-9][0-9]{0,2}|1000)(?=,|$)

【讨论】:

  • 很好,除非 OP 想要在 javascript 中使用它
  • 并且它不会验证整个字符串是否只包含有效数字。它只会从中选择有效的数字。如果它重复应用于字符串。最初的问题非常模糊,很难说这是否重要,但“验证”这个词让我停下来。一个正确的值就足以让正则表达式报告成功,很可能不是 Saurabh 想要的。
  • 此模式将匹配123,abc - 但他需要有一行 CSV 数字。
  • 感谢 carlpett 和 Tim。仅供参考,我在前端使用 javascript 并在后端使用 php 来验证此输入,我需要一个通用的正则表达式,它可以同时适用于两者是否可能。
  • @SaurabhSingh:这个正则表达式需要先行和后行,但由于我们不确切知道哪些字符串被接受以及哪些(如果有的话)根本不应该匹配,这只是对你的猜测可能想要。那么,什么可以,什么不行?空间呢?
【解决方案2】:

如果你想匹配整行,那么应该这样做:

^([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*$

根据您的要求,您可能还希望在开头、结尾和/或逗号之后允许空格。

这将允许开头有空格:
^\s*([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*$

这将允许末尾有空格:
^([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*\s*$

这将允许逗号后有空格:
^([1-9][0-9]{0,2}|1000)(,\s*([1-9][0-9]{0,2}|1000))*$

根据自己的喜好组合这些。

编辑 2:如果您想在分箱或末尾允许逗号,那么您的正则表达式变为

^,?([1-9][0-9]{0,2}|1000)(,\s*([1-9][0-9]{0,2}|1000))*,?$

这里,,? 表示可以有 0 个或 1 个逗号。

编辑:按要求解释:

  • 开头的 ^ 和结尾的 $ 是输入标记的开始/结束 - 它们确保我们测试整个输入
  • 括号的工作方式与您期望的一样
  • [1-9] 匹配数字 1 到 9,同样[0-9] 匹配数字 0 到 9
  • {0,2} 表示前一部分(在我们的例子中是 [0-9])出现在 0 到 2 次之间
  • | 是一个逻辑 OR - 匹配之前的部分或匹配之后的部分

因此,在第一组括号中,我们匹配数字 1 到 9,然后是 0、1 或 2 个数字 0 到 9 - 这给了我们 1 到 999 之间的数字 - 或者我们匹配 1000。

然后我们匹配一个逗号,后跟上述相同的块 - 此批次匹配 0 次或多次 - 如括号后的 * 字符所示。

【讨论】:

  • 感谢 aleks,它工作正常。但我不太明白怎么做。你介意解释一下吗
  • @SaurabhSingh:你不明白哪一部分?
  • @TimPietzcker 我不明白为什么如果字符串是 1 或 400 会出错,我的意思是最后一个字符是逗号
  • @SaurabhSingh 这种情况下的错误是正确的结果吗?或者你想允许吗?
  • 我想允许它,但它是如何工作的,我想了解这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2016-02-27
相关资源
最近更新 更多