簡體   English   中英

我想在使用javascript正則表達式時忽略方括號

[英]I want to ignore square brackets when using javascript regex

我正在使用javascript正則表達式進行一些數據驗證並指定我想接受的字符(我想接受任何字母數字字符,空格和以下內容!&,'\\-以及我可能會在以后添加的更多內容需要)。 我的代碼是:

var value = userInput;
var pattern = /[^A-z0-9 "!&,'\-]/;
if(patt.test(value) == true) then do something

它工作正常,並排除了我不希望用戶輸入的字母,除了方括號和插入符號。 從我讀過的所有javascript正則表達式教程中,它們都是特殊字符 - 括號表示它們之間的任何字符和此實例中的插入符號意味着任何不在方括號之間的字符。 我在這里和谷歌搜索了解為什么這些字符也被接受但無法找到解釋。

所以任何人都可以幫忙,為什么我的輸入接受方括號和插入符?

原因是你使用的是Az而不是A-Za-z。 Z(0x5a)和a(0x61)之間的ascii范圍包括方括號,插入符號,反引號和下划線。

你的正則表達式與你說的不一致:

我想接受任何字母數字字符,空格和以下內容!&,'\\ - 以及如果需要我稍后會添加更多內容

如果你想接受那些字符,你需要刪除插入符:

var pattern = /^[A-Za-z0-9 "!&,'\\-]+$/;

筆記:

  1. Az還包括角色:

      [\\] ^ _` 

    使用A-Za-z或使用i修飾符僅匹配字母:

     var pattern = /^[a-z0-9 "!&,'\\\\-]+$/i; 
  2. \\-只是字符-因為反斜杠將作為轉義的特殊字符。 使用\\\\允許反斜杠。

  3. ^$是錨,用於匹配字符串的開頭和結尾。 這可確保整個字符串與正則表達式匹配。

  4. +在字符類之后用於匹配多個字符。


如果你的意思是你想匹配比你接受和使用是為了防止進入“禁止”字符的用戶之外其他字符,則第一個音符上面描述您的問題。 使用A-Za-z代替Az (第二個音符也相關)。

我不確定你想要什么,但我不認為你現在的正則表達式符合你的想法:

它試圖找到一個字符不是A-z0-9 "!&,'\\-^表示not )。

另外,我甚至不確定Az匹配的是什么。 它是azAZ

因此,您當前的正則表達式匹配"."字符串"." "Hi." 但不是"Hi"

試試這個: var pattern = /[^\\w"!&,'\\\\-]/;

注意:\\ w還包含_ ,所以如果你想避免那么試試

var pattern = /[^a-z0-9"!&,'\\-]/i;

我認為你的正則表達式的問題是Az被理解為0x41(65)和0x7A(122)之間的所有字符,其中包括AZ和az之間的字符[] ^ _。 (Z為0x5A(90),a為0x61(97),這意味着前面的字符占用0x5B到0x60)。

暫無
暫無

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

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