如何判断哪个字符在JavaScript中与正则表达式匹配失败?
问题描述:
我有以下的代码,如果特殊字符在文件名中发现了无法验证:如何判断哪个字符在JavaScript中与正则表达式匹配失败?
var validationResult = /^[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/.test(fileName);
这个伟大的工程,并返回正确的结果。但是,现在我的客户想知道哪个角色实际上没有通过验证。我如何更改代码以便我可以指向验证失败的角色?
答
变化与String.prototype.match()
方法RegExp.prototype.test()
方法的方法:
var validationResult = fileName.match(/[^0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]/g);
如果validationResult
不是null
它是一个包含所有匹配的特殊字符
答
单程阵列,并创建该组的倒置以查找无效字符:
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
)标志显示所有不符合允许字符的字符。
我不相信这回答了这个问题,这是明确地找到哪些字符*不匹配这个正则表达式 –
@AndyRay,只是误读了问题,更新了。现在很好 – RomanPerekhrest