繁体   English   中英

正则表达式禁止使用特定顺序的某些字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM