使用文本掩码指令进行正则表达式月份验证



我正在使用带有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和从 19 的数字组成,第二个符号应以 1 开头,然后跟 012 - 这总是假的。

因此,您可以使用近似掩码,例如

this.mask = [/[01]/, /d/];

如果键入了01,则第一个占位符将有效,第二个占位符对任何数字都有效。

为了确保输入月份值,我建议为提交验证添加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]/];
   }

相关内容

  • 没有找到相关文章

最新更新