有一个文本框和一个验证文本框内条目的按钮。
如果它不应该验证表单中是否存在非法字符。
假设我进入以下词“排版#%存有^”如何验证文本框中的特殊字符并在错误消息中显示输入的特殊字符?
单击按钮时,两件事情应该发生
- 如果有SRE任何特殊字符如#$%^ &,然后形式提交应该失败。
- 一个错误信息会弹出类似“你已经使用了非法字符#,%和表单^”
什么是最好的方法是什么?
P.S:我想要一个不涉及jQuery的解决方案。
有一个文本框和一个验证文本框内条目的按钮。
如果它不应该验证表单中是否存在非法字符。
假设我进入以下词“排版#%存有^”如何验证文本框中的特殊字符并在错误消息中显示输入的特殊字符?
单击按钮时,两件事情应该发生
什么是最好的方法是什么?
P.S:我想要一个不涉及jQuery的解决方案。
你可以这样做:
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
方法从重复项中清除匹配的无效字符数组(参见下文)。然后,将最后一个无效字符从数组中删除,以便在输出结束时根据需要添加“and”。剩余的无效字符(如果有的话)然后以逗号连接并与最后一个无效字符组合。
由于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()
。
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更多信息的正则表达式检查
事实是否真的需要?如果有一个信息,比如'只有字母,数字,下划线和连字符'是不是更明智? – karim79 2010-08-24 06:46:55