如何确定哪个字符在JavaScript中与Regex匹配失败?

时间:2017-03-16 21:44:42

标签: javascript jquery regex validation

如果在文件名中找到特殊字符,我有以下代码未通过验证:

 var validationResult = /^[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/.test(fileName);

这很有效并返回正确的结果。但是,现在我的客户想要知道哪个字符实际上未通过验证。如何更改代码以便指向未通过验证的字符?

2 个答案:

答案 0 :(得分:0)

使用RegExp.prototype.test()方法更改String.prototype.match()方法方法:

var validationResult = fileName.match(/[^0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]/g);

如果validationResult不是null,那么它是一个包含所有匹配特殊字符的数组

答案 1 :(得分:0)

一种方法是存储可接受的组正则表达式,并创建该组的反转以查找无效字符:

allowedCharacters = '0-9a-zA-Z\\^\\&\\\'\\@\\{\\}\\[\\]\\,\\$\\=\\!\\-\\#\\(\\)\\.\\%\\+\\~\\_ ';
allowedRegex = new RegExp('^[' + allowedCharacters + ']+$')
notAllowedRegex = new RegExp('[^' + allowedCharacters + ']', 'g')

var invalidString = 'πa√b';
allowedRegex.test(invalidString) // false

invalidString.match(notAllowedRegex); // ["π", "√"]

注意你必须转义正则表达式字符串中的所有反斜杠\,因为它是一个字符串,而不是正则表达式文字。

这可以简单地通过构造一个带有[^...]的正则表达式来反转方括号内的任何内容。例如,[^a]将匹配字符a的任何内容。它使用本机RegExp类来构造基于字符串的正则表达式。 notAllowedRegex使用全局(g)标记来显示与允许的字符不匹配的所有字符。