【发布时间】:2020-06-23 17:58:16
【问题描述】:
我正在使用 react-maskedinput 并且对于掩码它接受正则表达式。我正在从后端获取掩码。有时掩码为空,我需要设置默认掩码。如果它是空的,我想允许用户输入任何 40 个符号。
export function getMaskForInput(mask) {
const newMask = mask.toString().replace(/`9/g, 'q').replace(/9/g, '1').replace(/q/g, '`9');
const emptyMask = '/\W{40}/g'; // probably not correct expression
if (mask) {
return newMask.replace(/`/g, '\\').replace('$', '');
}
console.log('empty mask');
return emptyMask;
}
const mask = getMaskForInput(maskEdit)
<MaskedInput
mask={mask}
type="tel"
id="account"
autoComplete="off"
maxLength={40}
placeholder="№ лицевого счета"
placeholderChar=" "
onChange={(e) => this.handleOnAccountChange(e.target.value.trim())}
value={this.state.account}
formatCharacters={{
W: {
validate(char) { return /[\wа-яА-Я \-0-9.@]/.test(char); },
},
w: {
validate(char) { return /[\wа-яА-Я \-0-9.@]/.test(char); },
}
}}
/>
但是当我返回 'emptyMask' 时,它会显示我的实际正则表达式 mask 。我哪里出错了?
【问题讨论】:
-
'/\W{40}/g'是包含正则表达式文字的字符串文字,这是错误的。如果需要设置正则表达式,则需要/\W{40}/g,不带引号。 -
@WiktorStribiżew 我试过不带引号,我得到一个错误“失败的道具类型:无效的道具
mask提供给regexpMaskedInput,预期string。”跨度>
标签: javascript regex reactjs input-mask