【问题标题】:javascript regex to validate the inputjavascript正则表达式验证输入
【发布时间】:2019-01-07 10:39:38
【问题描述】:

我必须使用 javascript 正则表达式验证我的输入。 我的有效输入应该是这样 100*100 或同一输入字段中的多个输入,如 50*30,90*40(以逗号分隔)

输入不应该是这样的**0*0 or 0 or 50 or 90*90,0*0 or 50*0 or 0*50 **

这些是图像的尺寸。

【问题讨论】:

  • 您是否尝试过编写正则表达式来验证您的输入?请发布您尝试过的内容
  • 请访问help center,使用tour查看内容和How to Ask。做一些研究,搜索关于SO的相关主题;如果您遇到困难,请发布您的尝试minimal reproducible example,并注明输入和预期输出。
  • 只有数字?但是你也有逗号和星号
  • 很不清楚你在问什么,请先试一试,然后在这里问
  • 您可以play with this regex101 并根据How to Ask 提出真正的问题。

标签: javascript regex


【解决方案1】:

你可以试试^(?!0\*0)(?:\d+\*\d+,?)+$

  • ^$ 确保整个字符串匹配。
  • (?!0\*0) 是一个否定的前瞻性检查字符串不是0*0
  • (?:) 表示内容为非捕获组
  • \d+ 匹配一位或多位数字 (0–9)
  • \* 匹配文字 * 字符
  • \d+ 匹配一位或多位数字 (0–9)
  • ,? 可选匹配文字逗号
  • + 匹配一个或多个前面的模式 ((?:\d+\*\d+,?))

已知错误:50*520*4 匹配。

编辑:找到解决该错误的方法。

^(?:(?!0\*0)\d+\*\d+,)*(?:(?!0\*0)\d+\*\d+)$

编辑:您编辑了问题以明确表明您不想匹配50*5,0*0。这可以通过将负前瞻放入重复匹配中来实现,如^(?:(?!0\*0)\d+\*\d+,?)+$

编辑:您提到不想匹配0*[anything][anything]*0。试试^(?:(?!0\*)\d+\*(?!0,)\d+,)*(?:(?!0\*)\d+\*(?!0$)\d+)$

使用解决方法on this RegExr demo 使用最新的正则表达式。

【讨论】:

  • 感谢您的回答,它工作正常,但有一个错误,它也接受 0*100 或 100*0 表达式
  • @Namanjain 请在您的问题中明确说明您不想匹配这些问题。有点不清楚,“0*0 或 0”是指“……或 0 次”。