reactjs - 基于已定义掩码的 TextField 列表
问题描述
我有这个组件可以输入一个 14 位数字。
const [account, setAccount] = useState('');
const handleAccountChange = (event) => { setAccount(event.target.value) }
<TextField
id="filter-by-account"
label="Search by: account "
variant="outlined"
fullWidth
value={account}
onChange={handleAccountChange}
InputProps={{ inputComponent: AccountNumberMask }}
/>
面具:
return (
<MaskedInput
{...other}
ref={(ref) => {
inputRef(ref ? ref.inputElement : null);
}}
mask={[/[1-9]/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/]}
showMask
onChange={() => { }}
onBlur={() => { }}
/>
);
我需要将此组件更新为除了一个 14 位数字的列表,而不仅仅是一个。
感谢您的建议。
谢谢
解决方案
作为正则表达式
/^\d{4} \d{4} \d{4} \d{2}$/g
mask={[/^\d{4} \d{4} \d{4} \d{2}$/]}
问题作者发表评论后更新
import * as React from "react";
import MaskedInput from "react-text-mask";
import { makeStyles } from "@material-ui/core/styles";
import Input from "@material-ui/core/Input";
import InputLabel from "@material-ui/core/InputLabel";
import FormControl from "@material-ui/core/FormControl";
const useStyles = makeStyles((theme) => ({
root: {
"& > *": {
margin: theme.spacing(1)
}
}
}));
const TextMaskCustom = React.forwardRef(function TextMaskCustom(props, ref) {
const setRef = React.useCallback(
(maskedInputRef) => {
const value = maskedInputRef ? maskedInputRef.inputElement : null;
if (typeof ref === "function") {
ref(value);
} else if (ref) {
ref.current = value;
}
},
[ref]
);
return (
<MaskedInput
{...props}
ref={setRef}
mask={[
/\d/,
/\d/,
/\d/,
/\d/,
" ",
/\d/,
/\d/,
/\d/,
/\d/,
" ",
/\d/,
/\d/,
/\d/,
/\d/,
" ",
/\d/,
/\d/
]}
placeholderChar={"\u2000"}
showMask
/>
);
});
export default function FormattedInputs() {
const classes = useStyles();
const [values, setValues] = React.useState({
textmask: "1111 1111 1111 11",
numberformat: "1320"
});
const handleChange = (event) => {
setValues({
...values,
[event.target.name]: event.target.value
});
};
return (
<div className={classes.root}>
<FormControl>
<InputLabel htmlFor="formatted-text-mask-input">
react-text-mask
</InputLabel>
<Input
value={values.textmask}
onChange={handleChange}
name="textmask"
id="formatted-text-mask-input"
inputComponent={TextMaskCustom}
/>
</FormControl>
</div>
);
}
看起来react-text-mask正在分别检查每个值
mask={[
/\d/,
/\d/,
/\d/,
/\d/,
" ",
/\d/,
/\d/,
/\d/,
/\d/,
" ",
/\d/,
/\d/,
/\d/,
/\d/,
" ",
/\d/,
/\d/
]}
推荐阅读
- python - pjax、eldarion-ajax 和常规请求一起在一个网站上——这正常吗?
- android - recyclerview 强制转换异常?
- ios - 我一直在获取:致命错误:索引超出范围
- javascript - 使用 XMLHttpRequest 时出现“for loop”错误
- javascript - 仅对 img 元素启用 Pinch 缩放
- python - 无法弄清楚为什么程序不提供输出
- python - Flask Sqlalchemy 和 Marshmallow 在引号中返回数组,例如“[Array]”
- python - How to transform my csv file into this scikit learn dataset
- node.js - 使用 node/express 上的书架获取存储在数据库中的项目的 ID
- python - 转置 - 切换行和列