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

时间:2014-04-06 12:19:47

标签: javascript regex

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

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中的值。

1 个答案:

答案 0 :(得分:2)

您有不同的方式允许或禁止字符串中的字符。让我们看看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 + ']');