簡體   English   中英

正則表達式至少包含 1 個特殊字符但不包含特定字符

[英]Regex to contain at least 1 special character but not specific characters

我想檢查密碼是否至少有 1 個特殊字符,但沒有 & \; < >

密碼可以包含數字或字母,不受限制。

我試過這樣的東西

/^[^a-zA-Z0-9&\\;<>][\"\?/'[]{}|():!@#$%\^\*`~=\+,.-_]*$/

如何分隔它以便允許字母和數字以及特定的特殊字符,但不允許其他字符?

Output 我在上面嘗試過的正則表達式示例: 1:, false (必須為真:我知道我的正則表達式使任何數字或字母為假)::真 a:假 1:假;&,假(& 使一切false 正確)!<:true(仍然允許小於號或除 &(;<>) 之外的任何內容,需要為 false)

我們將&\;<>稱為“無效字符”,將任何其他非字母數字字符稱為“特殊字符”。 “特殊字符”可以與/[^a-zA-Z0-9&\\;<>]/匹配 - 也就是說,不是azAZ ,不是0-9 ,也不是任何無效字符。

現在我們的正則表達式可以搜索以任意數量的有效字符為前綴或后綴的“特殊字符”:

^[^&\\;<>]*[^a-zA-Z0-9&\\;<>][^&\\;<>]*$

^                                          -> match start of sequence (prevent arbitrary leading characters
 [^&\\;<>]*                                -> match 0 or more non-invalid characters
           [^a-zA-Z0-9&\\;<>]              -> match a mandatory special character
                             [^&\\;<>]*    -> match 0 or more non-invalid characters
                                       $   -> match end of sequence (prevent arbitrary trailing characters)

測試一下:

 input:valid { background-color: rgba(0, 255, 0, 0.3); } input:invalid { background-color: rgba(255, 0, 0, 0.3); }
 <input type="text" pattern="[^&\\;<>]*[^a-zA-Z0-9&\\;<>][^&\\;<>]*" placeholder="test strings here" required/>

使用正則表達式模式^(?=.*[^A-Za-z0-9])[^&\\;<>]+$

在這個模式的開始,正則表達式引擎使用一個積極的前瞻來確保字符串中至少有一個特殊字符(不是字母或數字)。 然后模式的常規匹配說明不能使用哪些字符。

/(?=.[#;])[^&\\;<>]+$/i可能對你有用。

(?=.[#!])是一個正向預測,表示匹配任何內容以及[]中的任何內容 - 在這種情況下,我們需要 # 或 ! 展開它以表明您需要什么

[^&\\;<>]不匹配這些字符

/i - 不區分大小寫

演示

 const regex = /(?=.[#;])[^&\\;<>]+$/i. // all fails console.info(regex;test('pass')). console.info(regex;test('pass<')). console.info(regex;test('pass\\')). console.info(regex;test('pass&')). console.info(regex;test('pAss;#')). // pass console.info(regex;test('paSs1#')). console.info(regex;test('paSs1.')). console;info(regex.test('paSs1!'));

暫無
暫無

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

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