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中的控制台,转到右上角的选项,选择工具,然后选择开发工具。

于 2013-05-30T14:59:01.707 回答
0

尝试重命名提交按钮,去掉 id 和名称“提交”(重命名为“doSubmit”或 smth),这可能会导致问题并与表单的事件“提交”冲突。

于 2013-05-30T14:47:57.540 回答