[英]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 * $ **等)是錯誤的。
請告訴我我在哪里做錯了? 正則表達式是否有任何問題或檢查錯誤的方式?
字符串*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.