【发布时间】:2020-11-24 08:34:03
【问题描述】:
我正在尝试构建密码验证器。我的问题是布尔值valid 总是错误的,即使正则表达式被测试为正确。我实际上在我的应用程序中使用了打字稿,但我只是在 JSX 中做了一个演示:
App.js 文件如下所示:
import React, { useState } from "react";
import "./styles.css";
const App = () => {
const [inputValue, setInputValue] = useState('');
const [valid, setValid] = useState(false);
const isValidPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{12,}$/;
//const isValidPasswordRegex = /^\d+$/;
const validatePassword = (value) => {
if (!isValidPasswordRegex.test(value)) {
setValid(!valid);
} else {
setValid(valid);
}
return valid;
};
function onChange(e) {
setInputValue(e.target.value);
setValid(validatePassword(e.target.value));
}
return(
<div>
<div>Fill the password input and click elsewhere to blur the field</div>
<input
className={`${valid ? 'success' : 'error'}`}
onChange={onChange}
onBlur={onBlur}
value={inputValue}
/>
<div>{valid.toString()}</div>
</div>
);
}
export default App;
我在 SO 上查看了许多类似的问题,这些问题似乎使用了非常相似的逻辑,但我假设应用程序正在重新渲染,并且 valid 在每次渲染时都设置为 false。我认为 useState 是正确的实现,并且将其绑定到 onChange 事件会在每次更改时测试输入值。我担心我的正则表达式不正确,所以我还测试了一个更简单的条件(此处已注释掉),但这不是问题。
【问题讨论】:
标签: reactjs regex react-hooks