Javascript 允许用户输入时间的方法有困难

Javascript 允许用户输入时间的方法有困难,javascript,regex,Javascript,Regex,用户可以按照下面列出的格式在字段中输入时间。最后的时间将被保存并格式化为xx:xx 12小时。我允许用户灵活/懒惰,而不是抛出严格的错误 允许的格式 1(1位) 11(2位数字) 11.1(小时和分钟) 11 10(小时和分钟) 1110(小时和分钟,没有空间) 问题 我需要以某种方式获取用户输入的时间 在需要的地方添加前缀零,以便获得(xx:xx) 在小时和分钟之间添加“:” 为什么我需要特别的“:”插入?稍后我需要将小时和分钟保存到单独的变量中,但我需要在幕后重新格式化时间,使其始终为x

用户可以按照下面列出的格式在字段中输入时间。最后的时间将被保存并格式化为xx:xx 12小时。我允许用户灵活/懒惰,而不是抛出严格的错误

允许的格式

  • 1(1位)
  • 11(2位数字)
  • 11.1(小时和分钟)
  • 11 10(小时和分钟)
  • 1110(小时和分钟,没有空间)
问题

我需要以某种方式获取用户输入的时间

  • 在需要的地方添加前缀零,以便获得(xx:xx)

  • 在小时和分钟之间添加“:”

  • 为什么我需要特别的“:”插入?稍后我需要将小时和分钟保存到单独的变量中,但我需要在幕后重新格式化时间,使其始终为xx:xx,以可预测的格式保存它意味着我可以使用JavaScript将其按“:”进行拆分,并从中执行我需要的操作


    与其说我在寻找直接的答案,不如说我在寻找建议,因为我假设我需要正则表达式。

    使用替换方法,您可以执行以下操作:

    var myRegexp = /(\d{1,2})[ ]?(\d{0,2})/i;
    var match = myRegexp.exec(yourString);
    var result = match[1];
    if(match[1].length == 1)
    {
       result = match[1].concat("0");
    }
    result = result.concat(":");
    if(match[2].length != 2)
    {
       if(match[2].length == 0){
           result = result.concat("00");
       }
       else{
           result = result.concat(match[1].concat("0"));
       }
    }
    

    我的建议是使用一个时间选择器,它将解决所有开销,用户体验也将非常好

    下面是一个简单的例子

    我觉得使用这些时间选择器控件更好。


    你是如何通过平移来获得用户输入的,就像一个字符串一样?@Joseph我可能不得不这样做,例如,用户可以提交10 20 pm,如果我限制用户说你只能输入10 20减去任何pm或am,这会让人觉得奇怪。值是从字段中提取的,并传递到负责格式化的函数中。我来试一试。谢谢,你能解释一下正则表达式中的括号/括号,它们的用途吗?当然!
    []
    部分将匹配空白(
    \s
    也匹配换行符)。括号用于表示匹配组。
    {1,2}
    表示1和2之间的匹配。请注意,对于您的代码,例如,如果我传递的字符串是11 11,则我得到11:或9得到90:00Oh,正好是9。奇怪的是,我这里有两场比赛。无论如何,时间选择器确实是一个更好的解决方案(参见另一个答案)。我非常确定在编辑工作之前您的解决方案。抱歉,我不明白的另一件事是,为什么当number.length等于3时,数字为什么会被子串2,1?删除1您不需要它。或者你可以把3改成3。我很着急,对不起
    var number = "11 11";
    
    console.log(format(number));
    
    function format(number) {
        if (number.length == 1  ) {
            return '0' + number + ':00'
        }else if (number.length == 2) {
            return number + ':00'    
        } else if (number.length == 3){
            return number.substring(0, 2) + ':' + number.substring(2) 
        } else if (number.length == 4 || number.length == 5){
            return number.substring(0, 2) + ':' + number.substring(2).trim() 
        }
    
    }