Javascript 带文本掩码指令的正则表达式月验证

Javascript 带文本掩码指令的正则表达式月验证,javascript,regex,angular,typescript,ionic2,Javascript,Regex,Angular,Typescript,Ionic2,我在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]/,

我在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
    }
掩码:数组;
构造函数(){
this.mask=[/0[1-9]/,/1[0-2]/];//不工作
//this.mask=[/[1-9]/,/\d/];//这正在工作
}

掩码数组中的每个元素都限制用户可以输入的字符。例如,
mark=[/[1-9]/,/\d/]
意味着用户只能在第一个占位符中输入介于1和9之间的数字,并且只能在其后的占位符中输入一个数字

在您的例子中,标记
(/0[1-9]/,/1[0-2]/)
的每个元素都为整个输入字符串定义了有效的模式,而不是每个字符。这就是它不起作用的原因

根据,还可以传递函数作为掩码。你应该试试这样的

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]/];
   }

数组中的每个元素都对用户可以输入的字符施加限制。他们似乎不了解上下文
[/0[1-9]/,/1[0-2]/][/code>表示第一个符号可以由
0
1
9
之间的数字组成,第二个符号应该以
1
开头,然后紧跟
0
1
2
,这总是错误的

因此,您可以使用类似的近似遮罩

this.mask = [/[01]/, /\d/];
如果键入了
0
1
,则第一个占位符将有效,第二个占位符将对任何数字有效


为了确保键入月份值,我建议为提交时验证添加
pattern=“0[1-9]| 1[0-2]”

数组中的每个元素对用户可以输入的字符进行限制。他们似乎不了解上下文
[/0[1-9]/,/1[0-2]/][/code>表示第一个符号可以由
0
1
9
之间的数字组成,第二个符号应该以
1
开头,然后紧跟
0
1
2
,这总是错误的。为什么不直接使用
pattern=“0[1-9];1[0-2]”
?掩码可以是近似值,如
[/[01]/,/\d/]
。一些输入示例?@ZiTAL 01,11,12,09-其他月份数字。您向我显示了路径。是否将其作为答案?这是有效的:
[/[01]/,/[0-2]/]
@WiktorStribiżewit给出了这个编译时错误:
[ts]Type'(rawValue:any)=>(string | RegExp)[]”不能分配给Type'(string | RegExp)[]”。类型“(rawValue:any)=>(string | RegExp)[]”中缺少属性“push”。
是否尝试将行掩码:数组更改为掩码:any?是,现在错误消失了。但它有奇怪的行为。当我为第一个字符键入
1
时,它会自动显示
01
。当我再次按下
1
时,它会变为
10
。你知道为什么吗?对不起,我认为函数中的逻辑必须修改以存档你想要的结果,但现在我还没弄明白,我已经更新了答案。如果有任何问题,请反馈。非常感谢您的解释:)有一个小问题。您知道如何避免这个问题吗<代码>00
。现在可以了。是的,正如我写的那样:不可能用这个库编写上下文感知模式。您应该使用一种变通方法,我建议在提交验证中添加
pattern=“0[1-9]| 1[0-2]”
。您的意思是我需要同时使用这两种方法。对于掩码这个
[/[01]/,/[0-2]/][/code>和像这样的正常正则表达式验证,作为第二条规则。我说得对吗?不是规则,作为HTML5
模式的属性<代码>