Angular 表单 Validators.pattern 不适用于匹配 2 个变体

Angular form Validators.pattern does not work for matching 2 variants

提问人:f1vlad 提问时间:9/11/2023 更新时间:9/11/2023 访问量:35

问:

我有一个独特的情况,我必须验证日期时间格式或空字符串。其中任何一个都应该是有效的输入。但是,例如,格式错误或不完整的日期时间应该无法通过验证。

   myForm = this.form.group({
      ...
      ts: ['', [Validators.required, Validators.pattern('/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}|^(?=\s*$)$/')]],
   });

模板:

       <input
          type="datetime-local"
          class="form-control"
          formControlName="ts">

我在 https://regex101.com/ 中检查了我的正则表达式,它与空输入或正确的日期时间格式匹配,例如2023-09-14T17:17

但是,当我在我的应用程序中将该字段留空时,它仍然显示验证错误。

谁能推荐我可能遗漏的其他东西?

先谢谢你!

Angular 形式 验证 angular-reactive-forms

评论

0赞 Yong Shun 9/11/2023
您可以尝试在HTML中打印出来,看看您得到什么错误。{{ myForm.get('ts').errors | json }}

答:

0赞 Matthieu Riegler 9/11/2023 #1

这是在空字符串上重新出现错误,而不是您的.Validators.requiredValidators.pattern

0赞 Priyam3341278 9/11/2023 #2

如果你的正则表达式与空字符串匹配,这是可以接受的,那么你可以删除 . 你可以这样写:Validators.required

 myForm = this.form.group({
      ...
      ts: ['', [Validators.pattern('/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}|^(?=\s*$)$/')]],
   });

希望这有帮助!