Angular Validators.pattern无法匹配空值或日期时间格式的问题求助
问题分析与解决
你的问题出在两个核心点:
- 多余的
Validators.required验证器:这个验证器会强制字段必须有非空值,直接和你「允许空字符串」的需求冲突——空输入时会优先触发required错误,哪怕正则能匹配空值。 - 正则表达式的格式错误:Angular的
Validators.pattern接受字符串参数时,不需要包裹正则的斜杠/,你加的斜杠会被当成正则的一部分去匹配,导致空字符串无法通过正则校验。
修正后的代码
方式一:使用字符串正则(注意转义反斜杠)
myForm = this.form.group({ ... ts: ['', [Validators.pattern('^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}|^\\s*$')]], });
方式二:使用正则表达式对象(无需转义)
myForm = this.form.group({ ... ts: ['', [Validators.pattern(/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}|^\s*$/)]], });
修改后,空字符串或符合YYYY-MM-DDTHH:mm格式的日期时间都会通过验证,格式错误的输入则会被拦截。
内容的提问来源于stack exchange,提问作者f1vlad
相关产品推荐
相关产品推荐

