是否有逗号分隔的离散值列表的正则表达式?

Kuy*_*nda 6 regex excel

我使用以下正则表达式来验证逗号分隔的值列表.

^Dog|Cat|Bird|Mouse(, (Dog|Cat|Bird|Mouse))*$
Run Code Online (Sandbox Code Playgroud)

这些值也列在Excel单元格验证的下拉列表中,因此用户可以从下拉列表中选择单个值,或键入以逗号分隔的多个值.

正则表达式可以很好地防止用户输入除批准值之外的任何内容,但它不会阻止用户输入重复项.例如,用户可以输入"Dog"和"Dog,Cat",但用户也可以输入"Dog,Dog".

有没有办法使用类似的单个正则表达式来防止重复?换句话说,我需要能够强制执行批准的逗号分隔值的离散列表.

谢谢!

Jam*_*mes 11

使用反向引用和否定前瞻:

^(Dog|Cat|Bird|Mouse)(, (?!\1)(Dog|Cat|Bird|Mouse))*$
Run Code Online (Sandbox Code Playgroud)

编辑:这不适用于像"猫,狗,狗"这样的情况......你需要为这种情况提出一个混合解决方案 - 我不相信有一个正则表达式可以解决这个问题.


这是另一种技术.您需要检查两件事,首先,它与此匹配:

(?:(?:^|, )(Dog|Cat|Bird|Mouse))+$
Run Code Online (Sandbox Code Playgroud)

(这只是原始正则表达式的略短版本)

然后,检查它是否与此匹配:

(Dog|Cat|Bird|Mouse).+?\1
Run Code Online (Sandbox Code Playgroud)

例如

var valid = string.match( /(?:(?:^|, )(Dog|Cat|Bird|Mouse))+$/ ) &&
           !string.match( /(Dog|Cat|Bird|Mouse).+?\1/ );
Run Code Online (Sandbox Code Playgroud)