使用javascript和regex进行密码验证不需要';行不通

使用javascript和regex进行密码验证不需要';行不通,javascript,html,regex,validation,forms,Javascript,Html,Regex,Validation,Forms,我试图用javascript中的正则表达式函数验证密码。我将按钮设置为默认禁用,当密码有效时,我希望启用按钮 验证不起作用 在这里您可以看到javascript代码: function validPW() { if (isValid("passwort",document.getElementById("passwordRegistrationID").value)) { document.getElementById('passwordRegistrationID').disabled

我试图用javascript中的正则表达式函数验证密码。我将按钮设置为默认禁用,当密码有效时,我希望启用按钮

验证不起作用

在这里您可以看到javascript代码:

function validPW() {
if (isValid("passwort",document.getElementById("passwordRegistrationID").value)) {
    document.getElementById('passwordRegistrationID').disabled=false;
}

function isValid (type, toValidate){
switch (type){
    case "grossbuchstabeVorhanden" :
        var grossbuchstabe = /[A-Z]+/;
        return grossbuchstabe.test (toValidate);
        break;
    case "kleinbuchstabenVorhanden" :
        var kleinbuchstabe = /[a-z]+/;
        return kleinbuchstabe.test (toValidate);
    case "zahlenVorhanden" :
        var zahlen = /[0-9]+/;
        return zahlen.test (toValidate);
    case "sonderzeichenVorhanden" :
        var sonderzeichen = /[?!$%&/=<>_]+/;
        return sonderzeichen.test (toValidate);
    case "laengeRjichtig" :
        var laenge =/.{9,}/;
        return laenge.test (toValidate);
    case "passwort":
        return isValid("grossbuchstabeVorhanden",toValidate) && isValid("kleinbuchstabenVorhanden",toValidate)
            && isValid("zahlenVorhanden",toValidate) && isValid("sonderzeichenVorhanden",toValidate)
            && isValid("laengeRjichtig",toValidate)
}

虽然您发布的函数缺少两个大括号,但验证在我的测试中工作得非常好,因此从技术上讲,它不是有效的JavaScript,尽管我假设大括号存在于您的本地副本中。以下是它应该是什么:

函数validPW(){
if(isValid(“passwort”,document.getElementById(“passwordRegistrationID”).value)){
document.getElementById('passwordRegistrationID')。disabled=false;
}
函数isValid(类型,toValidate){
开关(类型){
“grossbuchstabeVorhanden”案:
var grossbuchstabe=/[A-Z]+/;
返回grossbuchstabe.test(验证);
打破
“kleinbuchstabenVorhanden”案:
变量kleinbuchstabe=/[a-z]+/;
返回kleinbuchstabe.test(验证);
“zahlenVorhanden”案:
var zahlen=/[0-9]+/;
返回zahlen.test(验证);
“sonderzeichenVorhanden”案:
var sonderzeichen=/[?!$%&/=+/;
返回sonderzeichen.test(验证);
“laengeRjichtig”案:
var laenge=/.{9,}/;
返回laenge.test(验证);
案例“passwort”:
返回值有效(“GrossBuchStabeVorrhanden”,待验证)和&isValid(“KleinBuchStabeVorrhanden”,待验证)
&&isValid(“zahlenVorhanden”,toValidate)和&isValid(“sonderzeichenVorhanden”,toValidate)
&&isValid(“laengeRjichtig”,toValidate)
}
}

}
您的错误是什么?您的验证有效且您的disable=false worksI已更新Post不应是validPWDepends的最后一个关闭backet,因为“isValid”本身可以是嵌套函数,也可以是全局函数。此外,我的意思是说
debugger
语句是测试时的朋友。将它插入到代码中的任意位置,即使您直接在浏览器JS控制台中运行代码,调试器也会在此时停止,以便您可以看到代码中发生了什么。请记住在激活代码之前删除该语句。在我的测试中,该按钮处于启用状态,即使我输入了有效密码。我在控制台中收到一条错误消息。这表明在调用“validPW”函数时未定义该函数。最明显的原因是函数定义中的语法错误,正如我前面指出的,代码中似乎缺少一些右括号(
}
)。请注意,在validPW函数中,您使用右括号关闭了
if
语句,但没有关闭
validPW
函数。
<form role="form" action="/user/doRegistration" method="post" class="login-form">
    <div class="form-group" id="usernameRegistrationDiv">
        <label class="sr-only" for="form-usernameRegistration">Username</label>
        <input type="email" name="form-usernameRegistration" required="required" placeholder="Username..." class="form-usernameRegistration form-control"
            id="form-usernameRegistration">
    </div>
    <div class="form-group" id="passwordRegistrationDiv">
        <label class="sr-only" for="form-passwordRegistration">Password</label>
        <input type="password" name="form-passwordRegistration" required="required" placeholder="Password..." class="form-passwordRegistration form-control"
            id="passwordRegistrationID" oninput="validPW();">
    </div>
    <div class="form-group">
        <label class="sr-only" for="form-password-registration">Password repeat</label>
        <input type="password" name="form-password-registration" required="required" placeholder="Password repeat..." class="form-password-registration form-control"
            id="form-password">
    </div>
    <button type="submit" id="buttonRegistration" class="btn" disabled> Sign up!</button>
</form>
registration:97 Uncaught ReferenceError: validPW is not defined