2017-03-16 33 views
0

我有以下的代码,如果特殊字符在文件名中发现了无法验证:如何判断哪个字符在JavaScript中与正则表达式匹配失败?

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

这个伟大的工程,并返回正确的结果。但是,现在我的客户想知道哪个角色实际上没有通过验证。我如何更改代码以便我可以指向验证失败的角色?

回答

0

变化与String.prototype.match()方法RegExp.prototype.test()方法的方法:

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

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

做到这一点是存储可接受的组正则表达式
+0

我不相信这回答了这个问题,这是明确地找到哪些字符*不匹配这个正则表达式 –

+0

@AndyRay,只是误读了问题,更新了。现在很好 – RomanPerekhrest

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)标志显示所有不符合允许字符的字符。