簡體   English   中英

將字符串(來自用戶的輸入文本)與正則表達式匹配

[英]Match a string(input text from user) with regular expression

我有一個要求,其中有一個客戶名稱文本框,用戶可以輸入客戶名稱給搜索客戶。 並且條件是用戶可以添加外卡搜索*在前面或后面的客戶名稱。 客戶名稱最少應為三個字符。 我正在使用Regex來驗證用戶輸入。 現在,如果輸入類似於“* aaa *”..我使用以下正則表達式驗證此類輸入:

[*] {1}([AZ] | [AZ] | [0-9]){3} [*] {1}

代碼如下:

  var str = "*aaa*"; var patt = new RegExp("[*]{1}([az]|[AZ]|[0-9]){3,}[*]{1}"); var res = patt.test(str); alert(res); 

  var str = "*aaa***"; var patt = new RegExp("[*]{1}([az]|[AZ]|[0-9]){3,}[*]{1}"); var res = patt.test(str); alert(res); 

  var str = "*aaa*$$$$"; var patt = new RegExp("[*]{1}([az]|[AZ]|[0-9]){3,}[*]{1}"); var res = patt.test(str); alert(res); 

現在輸入“* aaa *”res即將成立。 但對於這種類型的輸入也“* aaa **”,“* aaa * $”其comimg為真。 這是預期的,因為這些表達式還包含滿足正則表達式的部分(* aaa *)。但這些輸入(“* aaa **”,* aaa * $ **等)是錯誤的。

請告訴我我在哪里做錯了? 正則表達式是否有任何問題或檢查錯誤的方式?

^(?:[*]([a-z]|[A-Z]|[0-9]){3,}[*])$

使用錨點^$禁用部分匹配。參見演示。

https://regex101.com/r/tS1hW2/17

字符串*aaa*$$$包含一段*aaa* ,因此它將產生true ; 要匹配整個字符串,您需要在兩側添加錨點。 $^錨分別斷言主題的開始和結束。

此外,通過使用字符類技巧,您可以簡單地使用表達式。 \\w[0-9a-zA-Z_] ,我們只是不需要下划線,所以我們可以使用與\\w (即\\W )和下划線相反的負字符類; 我同意,它需要一些精神力量;-)

 var str = "*aaa*$"; var patt = /^\\*[^\\W_]{3,}\\*$/; var res = patt.test(str); alert(res); // false 

或者,您可以將所有角色類合並為一個,如下所示:

[A-Za-z0-9]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM