![](/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.