簡體   English   中英

正則表達式允許某些特殊字符-轉義問題

[英]Regex to allow certain special characters - escape issue

我正在研究打算與jquery validate插件一起使用的javascript正則表達式(我將其添加為其他方法)。 它必須(除其他規則外):

  1. 測試是否輸入了以下至少一個特殊字符之一:

     !, ", #, $, %, &, ', (, ), *, +,-, .,/, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, ~ 
  2. 不允許連續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

http://jsfiddle.net/t8609xv2/

一些技巧上的注意事項:

  • 在方括號表達式中,必須對以下四個特殊字符進行反斜杠轉義: /[\\] (正斜杠是因為它界定了正則表達式,反斜杠是因為它是轉義字符,而方括號則是因為它們界定了括號表達式。)
  • 在方括號表達式中,必須將破折號移到末尾,因為否則可能會指定字符范圍。 最后,它永遠不會指定范圍,因此將其放在那里總是更安全的。

這種模塊化方法還有利於可維護性,因為您可以在以后的某個時間點更輕松地進行更改(修改/添加/刪除正則表達式,或更改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

http://jsfiddle.net/t8609xv2/2/

您可以使用此正則表達式:

^(?!.*?(.)\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.

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