簡體   English   中英

在javascript中為除密碼的特定模式之外的所有內容編寫正則表達式

[英]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";
}

任何人都可以指導我如何將兩個變量( blockcharallowchar在這一點)? 中的數值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.

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