[英]write regex for everything except a particular pattern for password in javascript
我正在使用以下正則表達式模式來驗證密碼。
var expression = /^[^\!\@\#\$\%\^\&\*\(\)\-\s\=\+\[\{\]\}\;\:\'\"\<\>\?\/\,\.\`\~\'][^\s]+$/
它工作正常。
現在我需要更改它,以便我可以在此基礎上允許或阻止額外的字符。
我嘗試了以下代碼,但它無法正常工作。
var blockchar = "t";
var allowchar = "b";
var expression = '^' + blockchar + '[^\!\@\#\$\%\^\&\*\(\)\-\s\=\+\[\{\]\}\;\:\'\"\<\>\?\/\,\.\`\~\'' + allowchar + '][^\s]+$'
var regexp = new RegExp(expression);
var elmval = document.getElementById("txt1").value;
if (!elmval.match(regexp)) {
return "validation failed";
}
任何人都可以指導我如何將兩個變量( blockchar
和allowchar
在這一點)? 中的數值blockchar
應被阻塞,在所述值allowchar
應該被允許。
您有不同的方法來允許或禁止字符串中的字符。 讓我們看看3個基本的例子:
示例1:您在字符類中提供允許的字符
/^[a-zA-Z0-9@]+$/
在這里,只允許使用字母,數字和arobase,在開頭和結尾處的錨點確保整個字符串必須與模式匹配。
示例2:在字符類中給出不需要的字符(使用否定的字符類[^.....]
)
/^[^&#='")(]+$/
允許所有字符,除了&
#
=
'
"
示例3:檢查字符串是否包含不需要的字符
/[&#='")(]/
如果匹配的結果為false且字符串長度不為null(或您想要的大小),那么您的字符串是有效的。
如何允許新角色:
使用示例1,它很容易,你把它放在字符類中:
var charclass = 'a-zA-Z0-9@';
var allowchars = '{}';
var regexp = new RegExp('^[' + charclass + allowchars + ']+$');
使用示例2,它更加困難,因為從類中刪除字符並不容易。 一種方法是使用交替:
var charclass = '[^&#=\'")(]';
var allowchars = '&#';
var regexp = new RegExp('^(?:' + charclass + '|[' + allowchars + '])+$');
使用示例3,與示例2相同的問題,您需要從類中刪除字符。 您可以在課前使用否定前瞻:
var charclass = '[^&#=\'")(]';
var allowchars = '&#';
var regexp = new RegExp('^(?![' + allowchars + '])' + charclass );
如何禁止角色:
示例1:您沒有觸及原始類,但添加了一個負向前瞻(未后跟):
var charclass = '[a-zA-Z0-9@]+';
var blockchars = 'Yz8';
var regexp = new RegExp('^(?!.*[' + blockchars + '])' + charclass + '$');
字符Y
z
8
始終在字符類中,但如果字符串中存在這些字符,那么負向前瞻會使模式失敗。
例2:
您可以使用相同的precedant技巧,或者可以向(否定的)字符類添加禁用字符:
var charclass = '^&#=\'")(';
var blockchars = 'Yz8';
var regexp = new RegExp('^[' + charclass + blockchars + ']+$');
示例3:您也可以直接在類的末尾添加字符。
通過這些示例,您可以輕松構建代碼以允許字符並動態禁止其他字符:
例1:
var charclass = 'a-zA-Z0-9@';
var allowchars = '{}';
var blockchars = 'Yz8';
var regexp = new RegExp('^(?!.*[' + blockchars + '])[' + charclass + allowchars + ']+$');
例2:
var charclass = '^&#=\'")(';
var allowchars = '&#';
var blockchars = 'Yz8';
var regexp = new RegExp('^(?:[' + charclass + blockchars + ']|[' + allowchars + '])+$');
例3:
var charclass = '^&#=\'")(';
var allowchars = '&#';
var blockchars = 'Yz8';
var regexp = new RegExp('^(?![' + allowchars + '])[' + charclass + blockchars + ']');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.