如何验证输入字符串是xxx:xxx:xxx
格式。我不需要验证由:
分隔的字符数。我只需要确保给定输入中有:
分隔的3个块。
输入可以包含任何字符,包括空格,但不包含仅由以下内容分隔的3个空格:
这就是我的正则表达式的样子:
\w{3}:\w{3}:\w{4}$
此正则表达式的问题在于它检查格式xxx-xxx-xxxx
并使其他所有内容无效。我需要删除该约束。
有效输入可以是:
some:word that:is given by the user
a valid input:also:looks like this
and it:can:be this
输入无效:
: :
this:is invalid
this:is:also:invalid
this is invalid
如果您能解释正则表达式,我将非常感谢
答案 0 :(得分:4)
你可以使用像
这样的正则表达式^(?![\s:]*$)[^:]+:[^:]+:[^:]+$
或VERBOSE版本:
^ (?![\s:]*$) [^:]+ : [^:]+ : [^:]+ $
start no empty 1st 2nd 3rd end
^
匹配字符串的开头,[^:]+
匹配除:
和:
以外的1个或多个字符匹配冒号。 $
匹配字符串的结尾。
(?![\s:]*$)
前瞻将阻止块全部为空的匹配。
<强>更新强>
如果 任何 的块为空,要使匹配失败,请在每个块之前添加前瞻限制:
^(?!\s*:)[^:]+:(?!\s*:)[^:]+:(?!\s*$)[^:]+$
答案 1 :(得分:1)
另一种可能的解决方案,基于@WiktorStribiżew的回答。如果需要可变数量的组,则此更改将使其更好,因为我们只需将{2}
更改为所需的组数-1。
^(?![\s:]*$)([^:\n]+:){2}[^:\n]+$
更新1
解决以下问题:
这个正则表达式不能确定是否所有部分都是空的
经过一些调整,我得到了以下更新,仍然可以使用不同数量的组:
^(((\s*[^:\s]+)|(\s+[^:\s]+)|([^:\s]+\s+)|([^:\s]+\s*))+(\s)*:){2}(?!\s*$)[^:]+$