如何验证文本框中的特殊字符并在错误消息中显示输入的特殊字符?

时间:2010-08-24 06:43:14

标签: javascript regex validation

有一个文本框和一个按钮,用于验证文本框内的条目 如果它不应该验证表格中是否存在非法字符 假设我输入了以下单词“Lorem#%ipsum ^”

单击按钮时,应该发生两件事

  • 如果有任何特殊字符,如#$%^&,那么表单提交应该失败。
  • 应弹出一条错误消息,例如“您在表单中使用了非法字符#,%和^”

什么是最好的方法?
P.S:我想要一个不涉及jquery的解决方案。

2 个答案:

答案 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的更多信息,请查看

http://www.regular-expressions.info/javascript.html