是否有逗号分隔的离散值列表的正则expression式?
我使用下面的正则expression式来validation逗号分隔的值列表。
^Dog|Cat|Bird|Mouse(, (Dog|Cat|Bird|Mouse))*$
这些值也在Excel单元格validation的下拉列表中列出,因此用户可以从下拉列表中select单个值,或键入多个用逗号分隔的值。
正则expression式在阻止用户input除批准值之外的任何内容方面做得很好,但并不妨碍用户input重复项。 例如,用户可以input“狗”和“狗,猫”,但用户也可以input“狗,狗”。
有没有什么办法来防止重复使用类似的单个正则expression式? 换句话说,我需要能够执行一个批准逗号分隔值的离散列表。
谢谢!
使用反向引用和负面预测:
^(Dog|Cat|Bird|Mouse)(, (?!\1)(Dog|Cat|Bird|Mouse))*$
编辑 :这将不适用于例如“猫,狗,狗”的情况下…你需要为这种情况来混合解决scheme – 我不相信有一个正则expression式可以处理这种情况。
这是另一种技术。 你需要检查两件事情,首先,它是否符合这个要求:
(?:(?:^|, )(Dog|Cat|Bird|Mouse))+$
(这只是你的原始正则expression式的一个稍微更短的版本)
然后,检查它不符合这个:
(Dog|Cat|Bird|Mouse).+?\1
例如
var valid = string.match( /(?:(?:^|, )(Dog|Cat|Bird|Mouse))+$/ ) && !string.match( /(Dog|Cat|Bird|Mouse).+?\1/ );
JP,我试着编辑你的示例正则expression式,以便我可以在任何逗号分隔的string中查找重复项。 像这样的东西:
var valid = string.match( /(?:(?:^|, )([az]*))+$/ ) && !string.match( /([az]*).+?\1/ );
不幸的是,我失败了。 我的力量很弱。 ;)
再次感谢你的帮助。