【问题标题】:How to compare if two inputs values are the same in form validation with onChange如何在使用 onChange 的表单验证中比较两个输入值是否相同
【发布时间】:2021-04-18 14:55:20
【问题描述】:

当我在带有钩子的功能组件中输入数据时,我创建了一个表单验证,一切正常,直到我确认密码并返回密码的那一刻。当确认密码输入已经归档并且我对密码输入进行更改时,它看不到更改并且不会出现确认密码错误。我不知道如何让验证检测输入的变化,如果密码 === 确认密码,请再次检查。

export default function Register() {

const [error, setError] = useState({
    username: false,
    email: false,
    password: false,
    confirmPassword: false,
    consent: false

})

const handleChange = (e) => {
    let emailver = /^\S+@\S+\.\S+$/;
    let passValidation = /(?=.*[!#@$^%*])[a-zA-Z0-9!#@$%*^]{6,100}$/;

    switch (e.target.name) {
        case "username": (e.target.value.length <= 4 && e.target.value !== '')
            ? setError({ ...error, username: true })
            : setError({ ...error, username: false })
            break;

        case "email": (emailver.test(e.target.value) || e.target.value === '')
            ? setError({ ...error, email: false })
            : setError({ ...error, email: true })
            break;

        case "password": (!e.target.value.match(passValidation) && e.target.value !== '')
            ? setError({ ...error, password: true })
            : setError({ ...error, password: false })
            break;

        case "confirm-password": (e.target.value !== document.getElementsByName('password')[0].value)
            ? setError({ ...error, confirmPassword: true })
            : setError({ ...error, confirmPassword: false })
            break;

        default:
            break;

    }

}


return (
    <div>
        <div className="login">
            <h2>Register</h2>
            <div className="login-box">
                <form noValidate >

                    <input type="text" name="username" placeholder="Username" className={(error.username) ? 'error' : ''} onChange={handleChange} />
                    {(error.username) ? <span className="register-info">(Username has to be atleast 5 charaters long.)</span> : ''}

                    <input type="email" name="email" placeholder="E-mail" className={(error.email) ? 'error' : ''} onChange={handleChange} />
                    {(error.email) ? <span className="register-info">(Invalid e-mail.)</span> : ''}

                    <input type="password" name="password" placeholder="Password" className={(error.password) ? 'error' : ''} onChange={handleChange} />
                    {(error.password) ? <span className="register-info">Password should be 6 letters long and include one special character (! # @ $ %).</span> : ''}

                    <input type="password" name="confirm-password" placeholder="Confirm password" className={(error.confirmPassword) ? 'error' : ''} onChange={handleChange} />
                    {(error.confirmPassword) ? <span className="register-info">Passwords does not match</span> : ''}

                    <div className="consent">
                        <input type="checkbox" id="approval" className="approval" />
                        <label htmlFor="approval">Consent.</label>
                    </div>

                    <input type="submit" value="Register" id="reg-bt" />

                </form>
                <p><Link to="/"  className="login-link">Login</Link></p>
            </div>

        </div>
    </div>
)

}

【问题讨论】:

    标签: reactjs forms validation


    【解决方案1】:

    您需要将passwordconfirm-password 进行比较。

      case "password":
            !e.target.value.match(passValidation)?
            setError({ ...error, password: true }):
            e.target.value !== document.getElementsByName("confirm-password")[0].value ?
            setError({ ...error, confirmPassword: true })
             : setError({ ...error, password: false });
           break;
    

    【讨论】:

    • 我的意思是当我更改密码输入时,我已经填写了确认密码。应出现确认密码错误,因为它不再匹配。
    • 是的。当您更改密码时,它将与输入中已经存在的 on 进行比较,如果它们不相等,则会显示错误。
    • 让我告诉你我的意思,因为我认为我们仍然误解我所说的错误gfycat.com/pl/braveelderlydingo
    • 你试过我写的没用吗?
    • 如果是这种情况,请制作沙箱示例,并为您解决。
    猜你喜欢
    • 2014-04-06
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多