Regex 无法使正则表达式工作

Regex 无法使正则表达式工作,regex,Regex,我有一个第三方应用程序,它允许我输入正则表达式来验证文本框中的用户输入。我需要用户以这种格式输入数据C:64GB,F:128GB H:32GB。这是我写的正则表达式: \b[A-z]{1}[:]?\d*(GB|gb)\b 这个正则表达式工作正常,但它只验证第一个块。因此,如果我写入C:64gbf:128,它会将输入标记为有效。它不会检查F:128,因为这会使输入无效。它应该是C:64GB F:128GB 当我将正则表达式更改为^\b[A-z]{1}[:]?\d*(GB | GB)\b$时,它只

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

\b[A-z]{1}[:]?\d*(GB|gb)\b
这个正则表达式工作正常,但它只验证第一个块。因此,如果我写入
C:64gbf:128
,它会将输入标记为有效。它不会检查
F:128
,因为这会使输入无效。它应该是
C:64GB F:128GB

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


我做错了什么?

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

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

您可以这样使用:
^[A-Z]:?\d+(GB | GB),([A-Z]:?\d+(GB | GB)){2}$
。这将期望与整个模式相匹配。您可以看到一个有效的示例。

这是因为正则表达式非常有用。它将找到第一个匹配项,然后停止。您需要循环所有匹配项或应用全局修饰符(查找所有匹配项)

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

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


由于
[\s,]*

您的正则表达式将是有效的,因为它只查找至少一个有效的正则表达式等价项,正如您所看到的,您的第一个正则表达式验证它时,正则表达式是有效的。如果希望检查所有用户的输入,则应将输入字符串拆分为多个regex等价项,并逐个检查。或者使用正则表达式执行等效操作,这将给出:

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

  • 我删除了[A-Z]后面的{1},因为这是正则表达式的默认行为
  • 我将\b转换为^和$,因为您需要控制整个字符串,而不是其中的一部分
  • 我删除了:周围的[],因为它是无用的(您希望许多值仅介于1个值之间)
  • 我添加了空格作为分隔符,但是您可以使用任何您喜欢的字符来更改它
  • 我将您的(GB | GB)替换为[Gg][Bb],因此它在您的用户输入中不区分大小写

[A-z]{1}
您不需要
{1}
量化它不清楚用户id格式是什么。你能写一些例子和反例吗?所有的段落后面都应该有逗号,还是只有在第一个段落后面才有逗号,或者是可选的?只有C:?是
Gb
无效,因为您明确检查了
Gb | Gb
?它是有效的,并且我已将Gb和Gb添加到有效列表中。我无法获得不区分大小写的工作方式该表达式可以正常工作,但如果用户用空格或逗号或换行符分隔多个驱动器,我需要它有效。现在它只对空间有效。这就是我使用\b的原因。可以这样做吗?好的,现在试试我更新的正则表达式。它适用于任何非单词字符,如空格、逗号、冒号、分号等。