2010-08-24 29 views
0

有一个文本框和一个验证文本框内条目的按钮。
如果它不应该验证表单中是否存在非法字符。
假设我进入以下词“排版#%存有^”如何验证文本框中的特殊字符并在错误消息中显示输入的特殊字符?

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

  • 如果有SRE任何特殊字符如#$%^ &,然后形式提交应该失败。
  • 一个错误信息会弹出类似“你已经使用了非法字符#,%和表单^”

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

+1

事实是否真的需要?如果有一个信息,比如'只有字母,数字,下划线和连字符'是不是更明智? – karim79 2010-08-24 06:46:55

回答

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方法从重复项中清除匹配的无效字符数组(参见下文)。然后,将最后一个无效字符从数组中删除,以便在输出结束时根据需要添加“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()

+0

有什么JavaScript来.. .. P – jAndy 2010-08-24 06:58:41

+0

@jAndy:等一下。 – Gumbo 2010-08-24 07:09:17

+0

@Gumbo:我想要的是一个JavaScript解决方案,不需要PHP – naveen 2010-08-24 07:16:37

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更多信息的正则表达式检查

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