首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用正则表达式验证md-数据发送日期格式为MM/DD/YYYY

使用正则表达式验证md-数据发送日期格式为MM/DD/YYYY
EN

Stack Overflow用户
提问于 2017-09-12 16:14:56
回答 2查看 2K关注 0票数 1

我尝试使用正则表达式和以下列方式验证md-datepicker日期格式为md/DD/YYYY

这是接受正则表达式 MM/DD/YYYY格式的

代码语言:javascript
运行
复制
const DOB_REGEX = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;

这是input-errors-example.ts文件

代码语言:javascript
运行
复制
import {Component} from '@angular/core';
import {FormControl, Validators} from '@angular/forms';

const DOB_REGEX = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;

@Component({
  selector: 'input-errors-example',
  templateUrl: 'input-errors-example.html',
  styleUrls: ['input-errors-example.css'],
})
export class InputErrorsExample {


    dobFormControl = new FormControl(null, [
        Validators.required,
        Validators.pattern(DOB_REGEX)
    ]);

}

这是上面的html代码片段。

代码语言:javascript
运行
复制
<form class="example-form">

  <md-form-field class="example-full-width">
    <input mdInput [mdDatepicker]="picker" placeholder="Choose a date" [formControl]="dobFormControl" onkeypress='return (event.charCode >= 48 && event.charCode <= 57) || event.charCode == 47' maxlength="10">
    <md-datepicker-toggle mdSuffix [for]="picker"></md-datepicker-toggle>
    <md-datepicker #picker></md-datepicker>
    <md-error *ngIf="dobFormControl.hasError('required') || dobFormControl.hasError('pattern')">
      Please enter a valid Date
    </md-error>
  </md-form-field>

</form>

与此问题相关的这是柱塞

这是正常运行的,但是对于有效的日期输入,这一次显示错误消息。

此外,我尝试使用不同的正则表达式,但同样的事情发生,在我的方法有什么问题,或如何克服这个问题。

EN

回答 2

Stack Overflow用户

发布于 2017-09-12 17:15:17

看样子乱七八糟。我认为这是你想做的事:

代码语言:javascript
运行
复制
/^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$/

试一试,你就可以走了。我觉得这本书读起来很干净。它几乎是一个硬编码范围,包括2个数字、一个分隔符(可以更改)、2个硬编码数字、一个分隔符和4个数字(1900-2999)。这是可以调整的,因为你可能不想要1900年,例如。

-更新,回复评论: javascript的设置一定有一些奇怪的地方。下面是一个有效的python示例:

代码语言:javascript
运行
复制
import re

def main():
    theregex = re.compile("^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$")
    if re.search(theregex, "04/26/2017"):
        print ("match")

main()
票数 2
EN

Stack Overflow用户

发布于 2017-09-12 19:14:03

你可以试试。

测试并与Leap年一起工作。

(实际上可以削减更多..。哦,好吧)

1900年至2999年的MMDDYYYY

^(?:(?:(?:0?[13578]|1[02])([/.-])(?:0?[1-9]|[12]\d|3[01])\1|0?2([/.-])(?:0?[1-9]|1\d|2[0-8])\2|(?:0?[469]|11)([/.-])(?:0?[1-9]|[12]\d|30)\3|(?:0?[1-9]|[1-2]\d|3[0-1])([/.-])(?:0?[13578]|1[02])\4|(?:0?[1-9]|1\d|2[0-8])([/.-])0?2\5|(?:0?[1-9]|[12]\d|30)([/.-])(?:0?[469]|11)\6)(?:(?:19)?\d{2}|2\d{3})|(?:0?2([/.-])29\7|29([/.-])0?2\8)(?:19(?:0[48]|1[26]|2[048]|3[26]|4[048]|5[26]|6[048]|7[26]|8[048]|9[26])|2(?:[048](?:0[048]|1[26]|2[048]|3[26]|4[048]|5[26]|6[048]|7[26]|8[048]|9[26])|[1235679](?:0[48]|1[26]|2[048]|3[26]|4[048]|5[26]|6[048]|7[26]|8[048]|9[26]))))$

Regexr演示http://regexr.com/3go0m

代码语言:javascript
运行
复制
 ^     
 (?:
      # Non-Leap Years
      (?:
           # Month Day 

           (?: 0? [13578] | 1 [02] )
           ( [/.-] )                     # (1)
           (?: 0? [1-9] | [12] \d | 3 [01] )
           \1 
        |  
           0?2
           ( [/.-] )                     # (2)
           (?: 0? [1-9] | 1 \d | 2 [0-8] )
           \2 
        |  
           (?: 0? [469] | 11 )
           ( [/.-] )                     # (3)
           (?: 0? [1-9] | [12] \d | 30 )
           \3              

        |                              # or
           # Day Month   

           (?: 0? [1-9] | [1-2] \d | 3 [0-1] )
           ( [/.-] )                     # (4)
           (?: 0? [13578] | 1 [02] )
           \4 
        |  
           (?: 0? [1-9] | 1 \d | 2 [0-8] )
           ( [/.-] )                     # (5)
           0?2
           \5 

        |  
           (?: 0? [1-9] | [12] \d | 30 )
           ( [/.-] )                     # (6)
           (?: 0? [469] | 11 )
           \6              

      )
      (?:                           # Year  1900 - 2999
           (?: 19 )?                     # 2 digits defaults to current century
           \d{2} 
        |  
           2 \d{3} 
      )
   |  
      # Leap Years
      (?:
           # Month Day 
           0?2
           ( [/.-] )                     # (7)
           29
           \7 
        |                              # or,

           # Day Month   
           29
           ( [/.-] )                     # (8)
           0?2
           \8 
      )

      # Leap Years  1900 - 2999
      (?:
           19
           (?:
                0 [48] 
             |  1 [26] 
             |  2 [048] 
             |  3 [26] 
             |  4 [048] 
             |  5 [26] 
             |  6 [048] 
             |  7 [26] 
             |  8 [048] 
             |  9 [26] 
           )
        |  2
           (?:
                [048] 
                (?:
                     0 [048] 
                  |  1 [26] 
                  |  2 [048] 
                  |  3 [26] 
                  |  4 [048] 
                  |  5 [26] 
                  |  6 [048] 
                  |  7 [26] 
                  |  8 [048] 
                  |  9 [26] 
                )
             |  [1235679] 
                (?:
                     0 [48] 
                  |  1 [26] 
                  |  2 [048] 
                  |  3 [26] 
                  |  4 [048] 
                  |  5 [26] 
                  |  6 [048] 
                  |  7 [26] 
                  |  8 [048] 
                  |  9 [26] 
                )
           )
      )
 )
 $
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46181207

复制
相关文章

相似问题

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