如果字符串包含无效字符,我使用JavaScript进行检查;允许的字符为a-z
,A-Z
,0-9
和-
:
var str = 'Some string!',
invalid_characters = [];
if (/^[a-zA-Z0-9-]*$/.test(str) == false) {
console.log('Invalid characters: ' + invalid_characters.join(', '));
}
else {
console.log('String is OK.');
}
因此,在上面的例子中,和
!
不正确。如何将这些字符添加到数组invalid_characters
(每个字符只有一次没有重复)?感谢。
答案 0 :(得分:2)
过滤掉不符合您的模式的字符。
var str = 'Some string!!!';
var invalid_characters = str.split('').filter(function(char){
return !/[a-zA-Z0-9-]/.test(char)
})
// Filtering out duplicates
invalid_characters = invalid_characters.filter(function(char, pos) {
return invalid_characters.indexOf(char) == pos;
})
console.log(invalid_characters) //[" ","!"]
答案 1 :(得分:1)
也许不是最好和最简单的解决方案,但它应该有效:)
characters=str.split("");
wrong=[];
characters.forEach(function(character){
//check if wrong
if(/^[a-zA-Z0-9-]*$/.test(character) === false){
//check if duplicate
if(wrong.indexOf(character)<0){
wrong.push(character);
}
}
});
答案 2 :(得分:1)
以下内容应该为您完成大部分工作。
var str = 'Some! string! £';
var matches = str.match(/[^a-zA-Z0-9-]{1}/g);
if (matches) {
var invalid_characters = matches.filter(function(char, pos) {
return matches.indexOf(char) == pos;
});
console.log('Invalid characters: "' + invalid_characters + '"');
} else {
console.log('String is OK.');
}
JS小提琴here
这基本上是你的正则表达式模式的反转,应用了全局正则表达式标志(以确保match()获取所有匹配)。
我没有添加任何重复数据删除代码,因为有些库可以执行此操作,例如underscore,lodash或the answer to this question。我也很喜欢Jeremy在这个帖子中的回复。
编辑:我根据Jeremy的回答添加了重复数据删除,因为它非常简洁。通常我会在underscore docs here。的数组周围包裹_.uniq()