【问题标题】:Angular FormControl Pattern Validator not working with regex [duplicate]Angular FormControl 模式验证器不适用于正则表达式 [重复]
【发布时间】:2019-10-21 15:34:22
【问题描述】:

我正在尝试对文本输入进行一些限制。

我希望它只接受:

  • 字母数字字符 (a-z A-Z 0-9)
  • 3 个特殊字符(逗号、破折号、单引号):、-'
  • 一些重音字符:à â ç è é ê î ô ù û
  • 空格

所以我用正则表达式模式向输入声明一个验证器,如下所示:

this.form.addControl('adresseLine2', new FormControl('', Validators.pattern(PatternValidatorEnum.ADRESS_CONTENT)));

ADRESS_CONTENT 正则表达式如下:

ADRESS_CONTENT = '^[A-Za-z0-9\',\-àâçèéêîôùû ]*$'

它似乎工作正常,但是当我有大写重音字符时输入保持有效:É

我希望它只接受小写重音字符 (àâçèéêîôùû)

根据https://regex101.com/r/6vyA8H/1dsdséàê ké 应该是有效输入,但dsdséàê kÉ 不应该。

但是,在我的输入中,两者都被认为是有效的。

此外,我的输入接受.;/ 等字符,而根据正则表达式,它不应该接受。

我错过了什么?此外,我可能在正则表达式中忘记了某些情况。

【问题讨论】:

  • ADRESS_CONTENT = '[A-Za-z0-9\',àâçèéêîôùû -]*'ADRESS_CONTENT = /^[A-Za-z0-9',\-àâçèéêîôùû ]*$/ 都可以。

标签: javascript html regex angular forms


【解决方案1】:

这里的问题不是你的表达,而是你使用带有字符串的Validators.Pattern()而不是RegExp类型,改变你的表达

'^[A-Za-z0-9\',\-àâçèéêîôùû ]*$'

/^[A-Za-z0-9\',\-àâçèéêîôùû ]*$/

将解决问题。

【讨论】:

    【解决方案2】:

    如何使用这个正则表达式模式?

    /^(?!À-Ö)[A-Za-z0-9\',\-àâçèéêîôùû ]*$/
    

    您可以说排除大口音字符。此正则表达式支持您的所有输入。

    https://regex101.com/r/6vyA8H/2

    Stackblitz:https://stackblitz.com/edit/angular-8-reactive-form-8f5xmk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多