我尝试使用正则表达式和以下列方式验证md-datepicker日期格式为md/DD/YYYY
这是接受正则表达式 MM/DD/YYYY格式的
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文件
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代码片段。
<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>
与此问题相关的这是柱塞。
这是正常运行的,但是对于有效的日期输入,这一次显示错误消息。
此外,我尝试使用不同的正则表达式,但同样的事情发生,在我的方法有什么问题,或如何克服这个问题。
发布于 2017-09-12 17:15:17
看样子乱七八糟。我认为这是你想做的事:
/^(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示例:
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()
发布于 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
^
(?:
# 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]
)
)
)
)
$
https://stackoverflow.com/questions/46181207
复制相似问题