【问题标题】:Reactive forms regex.test is not a function反应形式 regex.test 不是函数
【发布时间】:2019-09-01 10:38:55
【问题描述】:

我有一个使用反应形式的模型,并不断给我 regex.test is not a function 的错误。

型号如下:

import { date, email, maxDate, maxLength, minDate, minLength, pattern, prop, required } from "@rxweb/reactive-form-validators";

export class UserInfo {

  @required()
  public firstName: string;

  @required()
  public lastName: string;

  @pattern({expression: {pattern: /(^\+?[\d\W-/]{4,16}$)/ } })
  @minLength({value: 4})
  public phoneNumber: string;

}

还有错误

ERROR TypeError: regex.test is not a function
    at Function.isValid (reactive-form-validators.js:719)
    at reactive-form-validators.js:3418
    at forms.js:1155
    at Array.map (<anonymous>)
    at _executeValidators (forms.js:1151)
    at RxFormControl.validator (forms.js:1096)
    at RxFormControl._runValidator (forms.js:3438)
    at RxFormControl.updateValueAndValidity (forms.js:3399)
    at new FormControl (forms.js:3843)
    at new RxFormControl (reactive-form-validators.js:2017)

在我正在 ngOnInit() 上执行的组件上发生:

this.baseForm = this.formBuilder.formGroup(this.user) as RxFormGroup;

更奇怪的是,只有当我实际拥有 phoneNumber 上的数据时才会发生这种情况。如果我的 phoneNumber 为空,它可以完美运行。

我什至测试了以下内容:

this.user.phoneNumber = "";
this.baseForm = this.formBuilder.formGroup(this.user) as RxFormGroup;

这行得通。对我来说更奇怪的是,我在stackblitz 上做了一个小例子,即使有数据,它也可以毫无问题地工作。

【问题讨论】:

  • 仅供参考:始终将文字 - 放在字符类的开头或结尾:[\d\W\/-]
  • @WiktorStribiżew 我也试过了,但我遇到了同样的问题
  • 是的,因为主要问题在代码中。
  • 可能你的答案是here
  • @WiktorStribiżew 我创建了一个新实例,手动映射,什么都没有

标签: regex angular typescript angular-reactive-forms


【解决方案1】:

它在我的机器上工作,请检查下图:

如果您有示例不工作的模式示例,请分享相同的示例

【讨论】:

  • 它也适用于我在 stackblitz 上制作的示例,我不知道为什么它不适用于我的解决方案
  • @heisenberg 没问题,它在我的本地机器上工作。提供的屏幕截图不是 stackblitz 运行示例。有趣的问题,如果您提供更多详细信息,我想深入研究一下
  • @heisenberg 如果我们可以使用 stackoverflow 聊天室或 rxweb gitter 聊天频道会很棒
  • 我不知道如何打开聊天室 :D 如果你愿意我们可以做到,就开始吧 eheh
  • @heisenberg 我不知道如何创建一个聊天室,请你来gitter:gitter.im/rxweb-project/rxweb
【解决方案2】:

我找到了解决方案,如下所示:

this.baseForm = this.formBuilder.formGroup(this.user) as RxFormGroup;
    (this.baseForm .controls.phoneNumber as FormControl)
      .addValidators(
        [TextValidator.regexMatchValidator(new RegExp(/(^\+?[\d\W-/]{4,16}$)/), "error message")]);

基本上在表单初始化之后添加一个验证器

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 2017-01-28
    • 2019-08-03
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多