簡體   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