如何返回不正确的字符?
问题描述:
我正在使用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.');
}
所以在上面的exaple,和
!
是不正确的。我怎样才能得到这些字符到invalid_characters
(每个字符只有一次没有重复)?谢谢。
答
过滤掉不符合你的模式的字符。
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) //[" ","!"]
答
也许不是最好的,最简单的解决方案,但它应该工作:)
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);
}
}
});
答
下应该做的大部分工作适合你。
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
这基本上是你的正则表达式的反转,应用了全球正则表达式标志(以确保比赛()拿起所有的结果)。
我还没有包含任何重复数据删除代码,因为有那些库可以执行此操作,例如underscore,lodash或the answer to this question。我也很喜欢Jeremy在这个主题中的回复。
编辑:我根据Jeremy的答案添加了重复数据删除功能,因为它非常简洁。通常我会围绕underscore docs here的数组包装_.uniq()
。
+0
谢谢,这也是解决方案。 – Legionar
str.split和循环槽 –