2017-10-19 30 views
0

我想創建一個正則表達式,它檢查字符串是否只包含任何特殊字符。所以我檢查以下情況:Javascript中的特殊字符的正則表達式

  • 「BX_ @ PO」 - 無效
  • 「40-66-7」 - 無效
  • 「_BXTP」 - 有效
  • 「 ABC123?」 - 有效
  • 「BXTP @」 - 有效
  • 「PO @ GO_」 - 無效

我想下面的代碼,但其檢查特殊字符的任意位置字符串並不僅在之間。

const hasSpecialCharacters = (str) => { 
    return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str); 
} 
+0

什麼是非特殊字符?所有字母數字ASCII字符,即a-z,A-Z和0-9? – Xufox

+0

@Xufox - 他們都應該被允許在字符串中。 – user7890278

+0

你能否請翻譯成真正的英語*試圖創建正則表達式,它檢查字符串是否有任何特殊字符只在*之間?它太模糊,並允許各種解釋。 –

回答

1

試試這個正則表達式:

^[\s\S][a-zA-Z0-9]*[\s\S]$

Click for Demo

說明:

  • ^ - 斷言字符串的開始
  • [\s\S] - 匹配任意字符
  • [a-zA-Z0-9]* - 匹配0個匹配的中間只有字母和數字的匹配項。因此,不允許特殊字符在中間
  • [\s\S] - 匹配任何字符
  • $ - 斷言的字符串
+0

嗨Gurman,感謝您的回答,如果我必須添加任何有效的特殊字符的白名單,那麼我怎麼能用你建議的方法做到這一點。如果我必須在字符下列入白名單:「/ - ?:()。,'+ SPACE」 – user7890278

+0

@ user7890278你的意思是說你想允許這些字符在中間? – Gurman

+0

是的男人..如果我想讓這些人物在中間? – user7890278

0

就像T.J's answer的結束,而是要爲各地可讀的方式:

const hasSpecialCharacters = (str) => { 
    return !/[a-zA-Z0-9][^a-zA-Z0-9]+[a-zA-Z0-9]/g.test(str) 
} 
+0

嗯,我認爲OP的正則表達式是特定於某個原因的。但我認爲它不符合有效/無效的例子,所以我繼續前進。 –

+0

我想OP在他們的角色類中錯過了@,所以它不匹配。 – searlea