无法使正则表达式工作

时间:2015-05-15 13:47:07

标签: regex

我有第三方应用程序,它允许我输入正则表达式来验证文本框中的用户输入。我需要用户以这种格式C:64GB, F:128GB H:32GB输入数据。这是我写的正则表达式:

\b[A-z]{1}[:]?\d*(GB|gb)\b

这个正则表达式工作正常,但它只验证第一个块。所以如果我写C:64GB F:128,它会将输入标记为有效。它不检查F:128,因为它使输入无效。它应该是C:64GB F:128GB

当我将正则表达式更改为^\b[A-z]{1}[:]?\d*(GB|gb)\b$时,它只允许我输入C:64GB

我在这里做错了什么?

5 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

^(\W*[A-Za-z]:?\d+(?:GB|gb)\W*)+$

答案 1 :(得分:2)

您可以使用i不区分大小写的标记来帮助简化调用

/^([A-Z]:?\d+GB[\s,]*)+$/i

这里是demo on regex101.com

由于[\s,]*

,这对于空格/逗号非常宽松

答案 2 :(得分:0)

您可以使用类似的内容:preg_match_all( "|(['\"])([^\"]*)(\1)|g", 'This \'is a\' small "demo of what" you\'re trying, to "do"!' ); 。这将期望匹配整个模式。您可以看到一个有效的示例here

答案 3 :(得分:0)

那是因为RegEx非常渴望。它将找到第一场比赛然后停止。您需要遍历所有匹配项或应用全局修饰符(找到所有匹配项)

答案 4 :(得分:0)

你的正则表达式是有效的,因为它只查找至少1个正则表达式等效的有效出现,并且如你所见,第一次出现验证它,正则表达式是有效的。如果要检查所有用户输入,则应将输入字符串拆分为多次出现的正则表达式,并逐个检查它们。或者使用正则表达式执行等效操作,这样就可以了:

^([A-Z]:?\d+[Gg][Bb] ?)+$

附注:

  • 我删除了[A-Z]之后的{1},因为它是正则表达式的默认行为,
  • 我将你的\ b转换为^和$因为你需要控制完整的字符串而不是它的一部分
  • 我删除了周围的[]因为它没用(你想要只有1个值之间的很多值)
  • 我将空格添加为分隔符,但您可以使用任何一个字符来更改它
  • 我用[Gg] [Bb]替换了你的(GB | gb),所以它不会对你的这个用户输入区分大小写