【问题标题】:Regular expression for matching a list of numbers [duplicate]用于匹配数字列表的正则表达式[重复]
【发布时间】:2016-10-28 08:13:32
【问题描述】:

我有一个如下所示的有效数字列表:

50, 56, 62, 68, 74, 80, 86, 92, 98, 104, 110, 116, 122, 128, 134, 140, 146, 152, 158

我需要一个允许此列表中的每个数字的正则表达式,但仅此而已。此正则表达式用于验证 HTML5 输入控件。几个澄清的例子:

50 => true
150 => false
abc => false
51 => false
110 => true
11 => false
50, 56 => false

我试过这个表达式,但问题是像 156 和 150 这样的数字也会匹配。

50|56|62|68|74|80|86|92|98|104|110|116|122|128|134|140|146|152|158

谁能帮帮我?

【问题讨论】:

  • 你是用pattern="50|56|62|68|74|80|86|92|98|104|110|116|122|128|134|140|146|152|158"吗?
  • 您的正则表达式按原样工作。首先完全没有问题。其次,在发布问题之前必须在真实的​​目标环境中进行测试,在线测试器经常被滥用,只有在您知道自己在做什么时才使用它们。 Regex101.com也提供样例代码生成,但HTML5模式有其特点。

标签: regex html


【解决方案1】:

添加^$ 以匹配字符串的开头和结尾

^(50|56|62|68|74|80|86|92|98|104|110|116|122|128|134|140|146|152|158)$

编辑

OP 在评论中提到他使用在线工具测试了他的模式并得到了错误的结果。 Wiktor Stribiżew 在评论中还提到,如果在 HTML 5 Input 元素的 pattern 属性中使用该模式,则 OP 的模式是正确

【讨论】:

  • 请注意pattern属性默认锚定正则表达式,无需添加另一对。如果在模式属性中使用模式,也会自动添加分组。
  • @WiktorStribiżew 它应该。但是OP说他的模式也匹配150,所以我认为他需要^$。也许他在服务器端或 javascript 上使用正则表达式。 OP 没有解释他是如何实施他的检查的。
  • 谢谢,问题是,我在在线工具中测试了表达式,因此它没有封装它。当我在 HTML 中尝试它时,它开箱即用。
  • @NiyokoYuliawan 如您所见,OP 不需要^$
  • @WiktorStribiżew 是的,你是对的。
猜你喜欢
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 2021-10-07
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多