我在这里问,因为我怀疑有一些与其他语言中的验证模式不同的角2验证模式。
我有一个用于asp.net验证的日期模式,用于获取mm/dd/yyyy,该模式考虑了闰年等,还接受m/d/yyyy。其用途如下。
dateSubmitted: [null, [Validators.required, Validators.pattern('((^(10|12|0?[13578])([/])(3[01]|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(11|0?[469])([/])(30|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(2[0-8]|1[0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(29)([/])([2468][048]00)$)|(^(0?2)([/])(29)([/])([3579][26]00)$)|(^(0?2)([/])(29)([/])([1][89][0][48])$)|(^(0?2)([/])(29)([/])([2-9][0-9][0][48])$)|(^(0?2)([/])(29)([/])([1][89][2468][048])$)|(^(0?2)([/])(29)([/])([2-9][0-9][2468][048])$)|(^(0?2)([/])(29)([/])([1][89][13579][26])$)|(^(0?2)([/])(29)([/])([2-9][0-9][13579][26])$))')]],
这个模式在我的asp.net应用程序中运行得很好,但是它不是在Angular2中,它失败了,无论我尝试在输入框中输入正确的日期格式,还是使用材料日期选择器输入它。我没能找到关于这件事的任何东西。我在Angular2中成功地应用了其他模式,比如电子邮件。
如果需要此信息,我的package.json中的棱角版本如下所示:
"@angular/animations": "^4.3.6",
"@angular/cdk": "^2.0.0-beta.10",
"@angular/common": "^4.1.0",
"@angular/compiler": "^4.1.0",
"@angular/core": "^4.1.0",
"@angular/forms": "^4.1.0",
"@angular/http": "^4.1.0",
"@angular/material": "^2.0.0-beta.10",
"@angular/platform-browser": "^4.1.0",
"@angular/platform-browser-dynamic": "^4.1.0",
"@angular/router": "^4.1.0",
"@ngrx/core": "^1.2.0",
发布于 2017-09-25 13:06:48
由于\d
被视为字符串转义序列而不是regex转义序列,所以您使用的模式没有正确编译。要做到这一点,你需要双倍的反斜杠。
此外,您的备选方案都包含了^
和$
锚。虽然它是正确的,但它看起来并不十分有效:在模式的开头放置一个^
,在模式的末尾放置一个$
是有意义的,同时在一个非捕获组中包装可选方案。
另外,您可以将所有捕获组转换为非捕获组(即(...)
到(?:...)
),以获得更高的性能,并将[/]
替换为简单的/
,因为/
符号不需要在RegExp
构造函数中转义。
所以,你可以用
dateSubmitted: [null, [Validators.required, Validators.pattern('^(?:(?:10|12|0?[13578])/(?:3[01]|[12][0-9]|0?[1-9])/(?:1[8-9]\\d{2}|[2-9]\\d{3})|(?:11|0?[469])/(?:30|[12][0-9]|0?[1-9])/(?:1[8-9]\\d{2}|[2-9]\\d{3})|0?2/(?:2[0-8]|1[0-9]|0?[1-9])/(?:1[8-9]\\d{2}|[2-9]\\d{3})|0?2/29/[2468][048]00|0?2/29/[3579][26]00|0?2/29/[1][89][0][48]|0?2/29/[2-9][0-9][0][48]|0?2/29/1[89][2468][048]|0?2/29/[2-9][0-9][2468][048]|0?2/29/1[89][13579][26]|0?2/29/[2-9][0-9][13579][26])$')]],
见更新Plunkr。
https://stackoverflow.com/questions/46351632
复制相似问题