Regex Kendo UI kendoMaskedTextBox 24小时时钟

Regex Kendo UI kendoMaskedTextBox 24小时时钟,regex,kendo-ui,kendo-maskedtextbox,Regex,Kendo Ui,Kendo Maskedtextbox,我正在尝试创建蒙面文本框,您可以在其中输入最多24:00,但我不能使正则表达式相互依赖。现在我能在25:00前打字了。如果第一个字符是2,我只需要能够输入{ //检查是否超过23小时 if(数字(fg.value?.split('d')[1]。子字符串(0,2))>23){ 常量值=fg.value.substring(0,5)+`+fg.value.substring(6); fg.设定值(值); } }, 200); } Thx,我可以看到正则表达式工作得非常完美。但我无法让它与kendoM

我正在尝试创建蒙面文本框,您可以在其中输入最多24:00,但我不能使正则表达式相互依赖。现在我能在25:00前打字了。如果第一个字符是2,我只需要能够输入<5。有人能帮忙吗

$(".hoursBox").kendoMaskedTextBox({
    mask: "12:34",
    rules: {
        "1": /[0-2]/,
        "2": /[0-9]/,
        "3": /[0-5]/,
        "4": /[0-9]/
   }
});

您可以使用下面的正则表达式进行此操作

((?!00)[0-1][0-9]|2[1-4]):[0-5][0-9]
它的工作原理

  • 第一位数字应该是
    [0-1]
    中的任意一位
  • 第二个数字应该是
    [0-9]
    中的任何东西
  • 但是第一个和第二个数字不能是“00”,因此我们可以使用负前瞻来测试这个
    (?!00)
  • 第三个字符应该是冒号(
  • 第四个字符应该是
    [0-5]
    中的任意一个
  • 第五个字符应该是
    [0-9]
    中的任意一个
  • 您可以看到它是如何匹配的。

    我这样做的

    <kendo-maskedtextbox
                  [includeLiterals]="true"
                  [formControl]="formGroup.get('duration')"
                  mask="000d12h34m"
                  [rules]="rules"
                  (keydown)="onKey(formGroup.get('duration'))"
                >
                </kendo-maskedtextbox>
    
    
     public rules = {
        '1': /[0-2]/,
        '2': /[0-9]/,
        '3': /[0-5]/,
        '4': /[0-9]/,
      };
    
      public onKey(fg: FormControl) {
        setTimeout(() => {
          // check for hours > 23
          if (Number(fg.value?.split('d')[1].substring(0, 2)) > 23) {
            const value = fg.value.substring(0, 5) + ` ` + fg.value.substring(6);
            fg.setValue(value);
          }
        }, 200);
      }
    
    
    公共规则={
    '1': /[0-2]/,
    '2': /[0-9]/,
    '3': /[0-5]/,
    '4': /[0-9]/,
    };
    公钥(fg:FormControl){
    设置超时(()=>{
    //检查是否超过23小时
    if(数字(fg.value?.split('d')[1]。子字符串(0,2))>23){
    常量值=fg.value.substring(0,5)+`+fg.value.substring(6);
    fg.设定值(值);
    }
    }, 200);
    }
    
    Thx,我可以看到正则表达式工作得非常完美。但我无法让它与kendoMaskedTextBox一起工作。这不起作用:$(“.hoursBox”).kendoMaskedTextBox({掩码:“00:00”,规则:{“0”:/((?!00)[0-1][0-9]| 2[1-4]):[0-5][0-9]/});这对kendoMaskedTextBox不起作用,规则只是说在一位数内允许什么,而不是整个框。-我想-您必须使用$(id).keydown(仅限TwentyFourHoursOnly)和TwentyFourHoursOnly函数内对所有情况进行测试,使用e,preventDefault()如果不通过,我也会遇到同样的问题,但我会作弊,使用Asp Mvc验证,而不是欢迎使用StackOverflow。请考虑在发布片断时添加一些细节(即您的代码是如何工作的或您是如何解决特定问题的)。