我正在使用带有ionic2的文本掩码angular2指令。我有一个月的JS正则表达式,像这样的/^(0[1-9]|1[0-2])$/
。它工作正常。但是现在我需要将其应用于上述指令。我已经尝试过如下。但它不起作用。你能告诉我为什么吗?
mask: Array<string | RegExp>;
constructor(){
this.mask = [/0[1-9]/, /1[0-2]/];//not working
//this.mask = [/[1-9]/, /d/]; //this is working
}
数组中的每个元素都对用户可以输入的字符施加限制。他们似乎不知道上下文。 [/0[1-9]/, /1[0-2]/]
表示第一个符号可以由0
和从 1
到 9
的数字组成,第二个符号应以 1
开头,然后跟 0
、1
或 2
- 这总是假的。
因此,您可以使用近似掩码,例如
this.mask = [/[01]/, /d/];
如果键入了0
或1
,则第一个占位符将有效,第二个占位符对任何数字都有效。
为了确保输入月份值,我建议为提交验证添加pattern="0[1-9]|1[0-2]"
。
掩码数组中的每个元素都限制用户可以输入的字符。例如,mark = [/[1-9]/, /d/]
表示用户只能在第一个占位符中输入 1 到 9 之间的数字,之后只能在占位符中输入一个数字。
在您的情况下,标记的每个元素(/0[1-9]/, /1[0-2]/)
为整个输入字符串定义一个有效的模式,而不是为每个字符定义一个有效的模式。这就是为什么它不起作用的原因。
根据文本掩码 angular2 文档,您还可以传递一个函数作为掩码。你应该尝试这样的事情
this.mask = function(rawValue) {
// add logic to generate your mask array
if (rawValue && rawValue.length > 0) {
if (rawValue[0] == '0') {
return [/[01]/, /[1-9]/];
} else {
return [/[01]/, /[0-2]/];
}
}
return [/[01]/, /[0-9]/];
}