为除JavaScript中的密码特定模式之外的所有内容编写正则表达式

write regex for everything except a particular pattern for password in javascript

本文关键字:正则表达式 JavaScript 密码 模式 为除      更新时间:2023-09-26

我使用以下正则表达式模式来验证密码。

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:

您可以使用相同的先行技巧,也可以将禁止字符添加到(否定的)字符类中:

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 + ']');