首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用角2验证模式的日期验证模式

不使用角2验证模式的日期验证模式
EN

Stack Overflow用户
提问于 2017-09-21 19:17:42
回答 1查看 6K关注 0票数 2

我在这里问,因为我怀疑有一些与其他语言中的验证模式不同的角2验证模式。

我有一个用于asp.net验证的日期模式,用于获取mm/dd/yyyy,该模式考虑了闰年等,还接受m/d/yyyy。其用途如下。

代码语言:javascript
运行
复制
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中的棱角版本如下所示:

代码语言:javascript
运行
复制
"@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",

编辑:添加柱塞:https://plnkr.co/edit/qHPZceVTpS4x1AEqZfjA

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 13:06:48

由于\d被视为字符串转义序列而不是regex转义序列,所以您使用的模式没有正确编译。要做到这一点,你需要双倍的反斜杠。

此外,您的备选方案都包含了^$锚。虽然它是正确的,但它看起来并不十分有效:在模式的开头放置一个^,在模式的末尾放置一个$是有意义的,同时在一个非捕获组中包装可选方案。

另外,您可以将所有捕获组转换为非捕获组(即(...)(?:...)),以获得更高的性能,并将[/]替换为简单的/,因为/符号不需要在RegExp构造函数中转义。

所以,你可以用

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46351632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档