有一个文本框和一个按钮,用于验证文本框内的条目 如果它不应该验证表格中是否存在非法字符 假设我输入了以下单词“Lorem#%ipsum ^”
单击按钮时,应该发生两件事
什么是最好的方法?
P.S:我想要一个不涉及jquery的解决方案。
答案 0 :(得分:4)
你可以这样做:
var invalidChars = str.match(/[^\w ]/g), output = '';
if (invalidChars) {
invalidChars = invalidChars.unique();
var lastInvalidChar = invalidChars.pop();
output = 'You have used the illegal character' + (invalidChars.length > 0 ? 's' : '') + ' ' +
invalidChars.join(', ') + (invalidChars.length > 0 ? ' and ' : '') + lastInvalidChar;
}
此处match
和正则表达式/[^\w ]/g
用于获取既不是单词字符也不是空格的所有字符。然后使用自定义unique
方法从重复项中清除匹配的无效字符数组(参见下文)。然后从数组中删除最后一个无效字符,如果需要,可以在输出结尾添加“和”。剩余的无效字符(如果有的话)然后用逗号连接并与最后一个无效字符组合。
由于JavaScript没有内置unique
方法来删除重复项,因此您可以使用此方法:
Array.prototype.unique = function() {
var index = {};
for (var i=0; i<this.length; ++i) {
if (!index.hasOwnProperty(this[i])) {
index[this[i]] = this[i];
}
}
var clean = [];
for (var prop in index) {
if (index.hasOwnProperty(prop)) {
clean.push(index[prop]);
}
}
return clean;
};
请注意,此实现不是类型安全的,因为这些值用作属性名称,因此转换为字符串。因此["3",3].unique()
会返回["3"]
,因此"3".toString() === (3).toString()
。
答案 1 :(得分:3)
var myString = document.getElementById("myInputField").value; // gets the sentence
var invalidChars = myString.replace(/[^#%\^]*/g, ""); //gets the chars | "#%^" in your case
var response = "";
for(var i = 0; i < invalidChars.length; i+){
response += (i > 0? (i == invalidChars-1 ? " and ": ", "):"") + invalidChars[i];
}
if (response != "") {
alert("Your data contains invalid characters " + response);
}
有关js regexes的更多信息,请查看