我有第三方应用程序,它允许我输入正则表达式来验证文本框中的用户输入。我需要用户以这种格式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
。
我在这里做错了什么?
答案 0 :(得分:2)
您可以使用此正则表达式:
^(\W*[A-Za-z]:?\d+(?:GB|gb)\W*)+$
答案 1 :(得分:2)
答案 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] ?)+$
附注: