[英]Regex to allow certain special characters - escape issue
我正在研究打算與jquery validate插件一起使用的javascript正則表達式(我將其添加為其他方法)。 它必須(除其他規則外):
測試是否輸入了以下至少一個特殊字符之一:
!, ", #, $, %, &, ', (, ), *, +,-, .,/, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, ~
不允許連續3個相同的字符:
通過:
aa
99
++
沒過:
aaa
999
+++
我的正則表達式的問題在於上述規則存在問題:我認為問題與轉義有關,並且我嘗試了轉義+和-均無濟於事。 誰能幫忙! 這是我的正則表達式: http : //regexr.com/3ack3
這是您可以通過使用多個正則表達式真正簡化您的生活的要求之一,而不是嘗試將所有邏輯都塞入具有許多斷言的一個復雜正則表達式中。 這是一些實現您的要求的JavaScript:
var specialCharRegex = /[!"#$%&'()*+.\/:;<=>?@\[\\\]^_`{|}~-]/;
var threeConsecutiveRegex = /(.)\1\1/;
var input = prompt();
if (specialCharRegex.test(input) && !threeConsecutiveRegex.test(input)) {
alert('passed');
} else {
alert('failed');
} // end if
一些技巧上的注意事項:
/[\\]
。 (正斜杠是因為它界定了正則表達式,反斜杠是因為它是轉義字符,而方括號則是因為它們界定了括號表達式。) 這種模塊化方法還有利於可維護性,因為您可以在以后的某個時間點更輕松地進行更改(修改/添加/刪除正則表達式,或更改if-test邏輯)。
另一個好處是,您可以獨立測試每個正則表達式,這可以使您向用戶提供更准確的錯誤消息,而不是僅僅說“無效密碼”之類的內容。
編輯:這是您可以將輸入中接受的字符列入白名單的方法:
var specialCharRegex = /[!"#$%&'()*+.\/:;<=>?@\[\\\]^_`{|}~-]/;
var threeConsecutiveRegex = /(.)\1\1/;
var nonWhitelistCharRegex = /[^a-zA-Z0-9!"#$%&'()*+.\/:;<=>?@\[\\\]^_`{|}~-]/;
var input = prompt();
if (specialCharRegex.test(input) && !threeConsecutiveRegex.test(input) && !nonWhitelistCharRegex.test(input)) {
alert('passed');
} else {
alert('failed');
} // end if
您可以使用此正則表達式:
^(?!.*?(.)\1{2})(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*?[!@#$%^&*()_=\[\]{};':"\\|,.<>\/?+-]).{8,20}$
您可以使用以下方法來縮短它:
^(?!.*?(.)\1{2})(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*?[\W_]).{8,20}$
即使用非單詞屬性\\W
而不是列出每個特殊字符。
^(?=.*[!"#$%&'()*+,,\/:;<=>?@\[\]^_`{|}~-])(?!.*(.)\1\1).*$
試試看。看演示。
https://regex101.com/r/wX9fR1/10
您需要positive lookahead
要檢查的special characters
。
和
negative lookahead
檢查一個字符是否存在3
次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.