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、特別な文字を含む1文字の文字列であるかどうかのみをテストしています。

同じロジックを維持するには(正規表現を使用しない)、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 に答える