【问题标题】:regex expression to allow user type any symbols允许用户键入任何符号的正则表达式
【发布时间】: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


【解决方案1】:

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

MaskedInput 的掩码格式字符串不是正则表达式。这是一个用户友好的字符串。你可以使用像"11-11" 这样的字符串,它相当于正则表达式/^\d\d-\d\d$/

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 2021-05-02
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多