1

フォームのフィールドを検証するために書かれた JavaScript 関数があります。この関数は、フィールドが空でないこと、35 文字の制限を超えていないこと、アルファベット文字とハイフン (-) のみが含まれていることを確認することになっています。フィールドが空ではなく、35文字を超えていないことを確認するコードがあり、正常に機能しましたが、フィールドを使用可能な文字に検証するコードを追加し、フィールドを空のままにしてテストしました。しかし、送信ボタンを押したとき、関数はまったく検証されていないようで、アラートは表示されず、送信されました。これが私のコードです:

function validateFamily()
{
var family=document.getElementById('family');
var stringf = document.getElementById('family').value;
if (family.value=="")
    {
     alert("Family name must be filled out");
     return false;
    }
else if (document.getElementById('family').value.length > 35)
    {
        alert("Family name cannot be more than 35 characters");
        return false;
    }
else if (/[^a-zA-Z\-\]/.test( stringf ))
    {
        alert("Family name can only contain alphanumeric characters and hypehns(-)")
        return false;
    }
    return true;
}

<form name="eoiform" method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="eoi" onsubmit="return validateFamily() && validateGiven() && validateMaleFemale() && validDate() && validateAddress() && validatePost() && validateParent() && validateWork() && validateHome() && validateMob() && validateCheckBoxes();">

<b>Student's Family Name</b> 
<br>
<input type="text" id="family" name="family" /><?php echo $strmsgf; ?>

<input type="submit" name="submit" id="submit" value="submit" />

</form>

誰かが私のコードを修正する方法を教えてもらえますか?

4

3 に答える 3

3

正規表現が壊れています。文字セットを囲む閉じ角括弧をエスケープしました。これを試して:

else if (/[^a-zA-Z0-9\-]/.test( stringf ))

また、迷惑ですが致命的ではない奇妙な混乱がたくさんあります。そのメソッドで getElementById('family') を実際に呼び出す必要があるのは何回ですか? 一度。

if (stringf=="")
{
    alert("Family name must be filled out");
    return false;
}
else if (stringf.length > 35)
{
    alert("Family name cannot be more than 35 characters");
    return false;
}
else if (/[^a-zA-Z0-9\-]/.test( stringf ))
{
    alert("Family name can only contain alphanumeric characters and hypehns(-)")
    return false;
}
return true;
于 2013-05-30T15:23:43.997 に答える
1

更新しました:

申し訳ありませんが、問題はあなたの正規表現にあります.私はそれを見逃しました.これに変更してください.

  var ck_password =  /^[A-Za-z0-9-]/;

            if(!ck_password.test(stringf))
            {

                alert("Family name can only contain alphanumeric characters and hypehns(-)")

            }

Chrome のコンソールで、右上隅の OPTIONS に移動し、TOOLS を選択してから DEVELOPER TOOLS を選択します。

于 2013-05-30T14:59:01.707 に答える