![](/img/trans.png)
[英]JS RegEx allow certain characters and a few character only when part of a specific sequence
[英]Regex to disallow certain characters in specific sequence
我有一个仅允许字母,数字,空格或连字符的正则表达式。 但是,我想禁止用户执行以下操作:
hello--world Have more than one hyphen sitting next to each other
--hello Have a hyphen in the beginning. It must have a number or letter first
我该如何完成? 我当前的正则表达式如下所示:
let alphanumericTest = new RegExp("^\s*([0-9a-zA-Z- ]*)\s*$");
您可以尝试此正则表达式。 ^\\s*[0-9a-zA-Z](?:(?!--)[0-9a-zA-Z- ])*$
您可以使匹配效率更高,而无需使用重复组来匹配非连续的连字符,而无需使用负前行匹配,重复组可以选择在第一个单词之后以连字符开头。
^[ ]*[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)*-?(?:[ ]+-?(?:[0-9a-zA-Z]+-?)*)*$
(为了清楚起见,使用[ ]
来匹配空格)
说明
^
字符串开头 [ ]*
匹配0+个空格 [0-9a-zA-Z]+
匹配1次以上列出的任意项 (?:-[0-9a-zA-Z]+)*
重复0+次匹配连字符和1+列出的内容 -?
匹配可选的连字符 (?:
非捕获组
[ ]+-?(?:[0-9a-zA-Z]+-?)*
匹配1+个空格,可选连字符,重复0+次列出的内容和可选连字符 )*
关闭外部非捕获组并重复0+次 $
字符串结尾 尝试:
let alphanumericTest = new RegExp("^(?!-)(?!.*--)[0-9a-zA-Z- ]+(?<!-)$");
这将检查的第一个字符是不是一个-
并且不存在连续的--
字符串s中的任何地方
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.