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

在javascript中为除特定密码模式之外的所有内容编写正则表达式,javascript,regex,Javascript,Regex,我使用下面的正则表达式模式来验证密码 var expression = /^[^\!\@\#\$\%\^\&\*\(\)\-\s\=\+\[\{\]\}\;\:\'\"\<\>\?\/\,\.\`\~\'][^\s]+$/ var expression=/^[^\!\@\\$\%\^\&\*\(\)\-\s\=\+\[\\\]\\\\\\\:\''\'“\\?\/\,\.\'\\\\\\\'][^\s]+$/ 它工作得很好 现在我需要对它进行修改,这样我就可以在上面添加允

我使用下面的正则表达式模式来验证密码

var expression = /^[^\!\@\#\$\%\^\&\*\(\)\-\s\=\+\[\{\]\}\;\:\'\"\<\>\?\/\,\.\`\~\'][^\s]+$/
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";
}
var blockchar=“t”;
var allowchar=“b”;
变量表达式='^'+blockchar+'[^\!\@\\\\$\%\^\&\*\(\)\-\s\=\+\[\\\\]\\\\\\\\:\'\'\'\“\\?\/\,\.\`\\\\\\'+allowchar+'][^\s]+$'
var regexp=新的regexp(表达式);
var elmval=document.getElementById(“txt1”).value;
如果(!elmval.match(regexp)){
返回“验证失败”;
}

有谁能指导我如何将这两个变量(
blockchar
allowchar
)合并到这个函数中?应该阻止
blockchar
中的值,并且应该允许
allowchar
中的值。

允许或禁止字符串中的字符有不同的方法。让我们看3个基本示例:

  • 示例1:在字符类中指定允许的字符

    /^[a-zA-Z0-9@]+$/

在这里,只允许字母、数字和arobase,开头和结尾的锚定确保整个字符串必须与模式匹配

  • 示例2:在字符类中提供不需要的字符(使用否定字符类
    [^….]

    /^[^&#=”(]+$/

除了
&
=

  • 示例3:检查字符串是否包含不需要的字符

    /[&#=”)(]/

如果匹配结果为false且字符串长度不为null(或您想要的大小),则您的字符串有效

如何允许新字符:

对于示例1,很简单,您可以将其放在character类中:

var charclass = 'a-zA-Z0-9@';
var allowchars = '{}';
var regexp = new RegExp('^[' + charclass + allowchars + ']+$');
var charclass = '^&#=\'")(';
var blockchars = 'Yz8';
var regexp = new RegExp('^[' + charclass + blockchars + ']+$');
对于示例2,由于从类中删除字符并不容易,因此难度更大。一种方法是使用替换:

var charclass = '[^&#=\'")(]';
var allowchars = '&#';
var regexp = new RegExp('^(?:' + charclass + '|[' + allowchars + '])+$');
对于示例3,与示例2的问题相同,您需要从类中删除字符。您可以在类之前使用负前瞻:

var charclass = '[^&#=\'")(]';
var allowchars = '&#';
var regexp = new RegExp('^(?![' + allowchars + '])' + charclass );
如何禁止字符:

示例1:您不接触原始类,但添加了一个负的前瞻(后面不跟):

字符
Y
z
8
始终在字符类中,但是如果字符串中存在其中一个字符,则负前瞻将导致模式失败

例2:

您可以使用相同的进言诀窍,也可以将禁止的字符添加到(否定的)字符类中:

var charclass = 'a-zA-Z0-9@';
var allowchars = '{}';
var regexp = new RegExp('^[' + charclass + allowchars + ']+$');
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 + ']');

第一步是了解初始表达式是如何工作的。我根据自己的理解修改了第一个表达式。如果有任何错误,请帮助我更正。初始表达式的要求是什么?这将验证密码。是的,但您希望允许哪些字符?感谢您为此提供详细答案。F从您的回答中,我总结出一个如下所示的模式,但它没有相应地验证。var allowchar=“!”;var charclass='a-zA-Z0-9@';var blockchars='Yz8';var regexp=new regexp('^(?.*['+blockchars+'])'+'['+charclass+eallowexception+'+'+'+'$'));显示了错误的答案。@user833985:
eallowexception
未定义(键入?),您忘记了字符类后的
+
。抱歉..这是一个键入错误。但即使是
var allowchar=“!”;var charclass='a-zA-Z0-9@;var blockchars='Yz8',var regexp=new regexp('^.*.['+blockchars++')+'['+charclass+allowchar+']+'$';
不起作用。@user833985:The+,The+!您忘记了最后一个字符类之后的
+
量词。@user833985:不同之处在于
charclass
是一个否定字符类(我希望是示例2),如果您编写
'['+charclass+allowchar+]“
从允许的字符中删除
allowchar