正则表达式,允许用户键入任何符号

我正在使用react-maskedinput,对于mask它接受正则表达式。我正在从后端获取蒙版。有时遮罩为空,我需要设置默认遮罩。如果为空,我希望允许用户键入任何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的正则表达式。我在哪里犯错?

正则表达式,允许用户键入任何符号

iCMS 回答:正则表达式,允许用户键入任何符号

我认为您误解了MaskedInput组件的工作原理。

MaskedInput的掩码格式字符串不是正则表达式。这是用户友好的 string 。您可以使用"11-11"之类的字符串,该字符串等效于正则表达式/^\d\d-\d\d$/

此格式字符串具有一些characters you can use out of the box1aA*#代表的字符类(例如: 1代表任何数字)和符号(例如-/代表它们自己)。

您可以定义自己的符号类,这就是您使用wW所做的工作-您将这些类定义为与正则表达式[\wа-яА-Я \-0-9.@]匹配的任何东西。

但是,要屏蔽40个自定义字符类,则不能使用W{40},因为{40}对正则表达式有效,但对屏蔽字符串无效。请记住,掩码不是正则表达式。因此,如果您想要与W类匹配40倍的蒙版,则需要使用"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW""W".repeat(40)

本文链接:https://www.f2er.com/2072137.html

大家都在问