我使用以下正则表达式来验证逗号分隔的值列表.
^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)
| 归档时间: |
|
| 查看次数: |
15483 次 |
| 最近记录: |