1

我有以下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;
                 }

    }

    }
            }

问题在于,当输入是特殊字符时,不会发出不允许输入的警告。为什么??希望得到帮助。谢谢

4

2 回答 2

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;
}
于 2013-02-01T09:15:09.693 回答
1

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

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

...

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

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

[\!\@\#...]

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

仅供参考,您不需要==null支票。它在功能上与=="". 你也不需要!= ""支票(因为你已经检查过了)

并且您的数字正则表达式应该只是/[0-9]/,否则foo22bar将被允许。

于 2013-02-01T09:21:43.443 回答