代码之家  ›  专栏  ›  技术社区  ›  codeandcloud

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

  •  0
  • codeandcloud  · 技术社区  · 14 年前


    如果它不应该验证表单中是否存在非法字符。
    假设我输入了以下单词“Lorem#%ipsum^”

    一按按钮,就会发生两件事

    最好的方法是什么?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Gumbo    14 年前

    你可以这样做:

    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没有内置的

    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() .

        2
  •  3
  •   Matyas    11 年前
    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);
    }
    

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