我正在嘗試在材料 UI 中創建一個具有特定正則運算式條件的密碼驗證器,當滿足條件時,它會從專案符號點更改為復選框。

到目前為止,我已經嘗試使用 npm 庫:NiceInputPassword 但這并不能讓我輕松更改狀態,所以我將回到我的常規 Material UI。我已經閱讀了關于 Material UI 中串列的檔案,但我找不到任何可以讓我將專案符號點更改為復選框的內容,如圖所示。
uj5u.com熱心網友回復:
我認為您可以使用 @mui/material 和 @mui/icons-material 庫來滿足您的所有要求,如下所示:
import { TextField } from "@mui/material";
import { useEffect, useState } from "react";
import "./styles.css";
import CheckCircleIcon from "@mui/icons-material/CheckCircle";
import CircleIcon from "@mui/icons-material/Circle";
function checkUppercase(str) {
for (let i = 0; i < str.length; i ) {
if (
str.charAt(i) === str.charAt(i).toUpperCase() &&
str.charAt(i).match(/[a-z]/i)
) {
return true;
}
}
return false;
}
const SPECIAL_CHARS = "!@#$%^&*()";
function checkSpecialChars(str) {
const alreadyFoundChars = [];
for (let i = 0; i < str.length; i ) {
const currentChar = str[i];
if (!alreadyFoundChars.includes(currentChar)) {
if (SPECIAL_CHARS.includes(currentChar)) {
alreadyFoundChars.push(currentChar);
}
}
}
return alreadyFoundChars.length >= 3;
}
const getIcon = (isChecked) => {
const smallDotIcon = <CircleIcon sx={{ fontSize: "0.4rem" }} />;
const checkCircleIcon = <CheckCircleIcon sx={{ fontSize: "0.8rem" }} />;
const iconToBeRendered = isChecked ? checkCircleIcon : smallDotIcon;
return (
<div
style={{
height: "20px",
width: "15px",
display: "flex",
alignItems: "center",
justifyContent: "center"
}}
>
{iconToBeRendered}
</div>
);
};
const prepareHelperText = (value) => {
const firstIcon = getIcon(value.length >= 8);
const secondIcon = getIcon(checkUppercase(value));
const thirdIcon = getIcon(checkSpecialChars(value));
return (
<div>
<div style={{ display: "flex" }}>
{firstIcon}
Must contain at least 8 characters
</div>
<div style={{ display: "flex" }}>
{secondIcon} Must contain at least 1 uppercase letter
</div>
<div style={{ display: "flex" }}>
{thirdIcon} Must contain 3 of the 4 types of characters !@#$%^&*()
</div>
</div>
);
};
export default function App() {
const [value, setValue] = useState("");
const [helperText, setHelperText] = useState("");
useEffect(() => {
setHelperText(prepareHelperText(value));
}, [value]);
return (
<div className="App">
<TextField
type="password"
label="Password"
value={value}
onChange={(e) => setValue(e.target.value)}
helperText={helperText}
sx={{
"& .Mui-focused": {
color: "purple"
},
"& label.Mui-focused": {
color: "purple !important"
},
"& .MuiOutlinedInput-root": {
"&.Mui-focused fieldset": {
borderColor: "purple"
}
}
}}
/>
</div>
);
}
您可以查看
支持鏈接:
- 用作 base-64 背景影像資料時如何更改 svg 填充顏色?
- 如何使用 Material Design Icon 作為 CSS background-image 值?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513569.html
