如果在文件名中找到特殊字符,我有以下代码未通过验证:
var validationResult = /^[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/.test(fileName);
这很有效并返回正确的结果。但是,现在我的客户想要知道哪个字符实际上未通过验证。如何更改代码以便指向未通过验证的字符?
答案 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
)标记来显示与允许的字符不匹配的所有字符。