在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@]+$/
- 示例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
。