验证特殊字符JavaScript

时间:2013-02-01 09:12:43

标签: javascript validation special-characters

我有以下JS代码:

修改

      function validateForm() {
            var IsOk = true;
            var RegNumbers = (/^[0-9]+$/);
           var iChars = "!@#$%^&*()+=-[]\';,/{}|\":<>?";
           if (Fname == null || Fname == "") {
                    alert("can't be empty");
                    IsOk = false;
                }
                else if (Fname.length < 2) {
                    alert("the iput too short ");
                    IsOk = false;
                }
  else if (Fname != "") {

            if (RegNumbers.test(Fname)) {
                alert("Fname can't include numbers");
                IsOk = false;
            }
                    for (var i=0; i<Fname.length;) {
                 if (iChars.indexOf(Fname[i]) != -1) {
                    IsOk = false; alert('no special chracters pleas!');

                     break;
                 }

    }

    }
            }

问题是当输入是特殊字符时,没有警告它是不允许的。为什么?? 希望得到帮助。感谢

2 个答案:

答案 0 :(得分:2)

这一行:

if (iChars.indexOf(Fname) >= 0) {

仅测试Fname字符串是否在iChars内。除了极少数情况,您只测试Fname是否是包含特殊字符的一个字符串。

要保持相同的逻辑(不使用正则表达式),您必须迭代Fname:

for (var i=0; i<Fname.length; i++) {
   if (iChars.indexOf(Fname[i]) >= 0) {
      alert('...');
      IsOk = false;
      break;
   }
}

您可以使用正则表达式“简化”:

if (Fname.match(/[\!\@#\$\%\^\&\*\(\)\+\=\-\[\]\\\'\;\,\/\{\}\|\"\:\<\>\?]/)) {
      alert('...');
      IsOk = false;
}

答案 1 :(得分:1)

您需要测试任何一个字符,最好的方法是使用正则表达式:

var iChars = "!@#$%^&*()+=-[]\';,/{}|\":<>?";
  ,    iRx = new RegExp( '[\\' + iChars.split('').join( '\\' ) + ']' );

...

if( iRx.test( Fname ) ) {
    ...
}

这样做会将您的特殊字符列表转换为正则表达式:

[\!\@\#...]

意味着如果这些字符中的任何字符在字符串中的任何位置,它将匹配

任何FYI,您都不需要==null检查。它在功能上与==""相同。你也不需要!= ""检查(因为你已经检查过了)

您的号码正则表达式应为/[0-9]/,否则foo22bar将被允许。