Javascript 简化方法以确保时间格式正确

Javascript 简化方法以确保时间格式正确,javascript,time,Javascript,Time,我有下面的代码 function isProperTimeForm(clockTime) { return (clockTime.length == 8) && (isDecimal(clockTime.charAt(0))) && (isDecimal(clockTime.charAt(1))) && (clockTime.charAt(2) == ':

我有下面的代码

 function isProperTimeForm(clockTime)
{
    return     (clockTime.length == 8) 
            && (isDecimal(clockTime.charAt(0))) 
            && (isDecimal(clockTime.charAt(1)))
            && (clockTime.charAt(2) == ':')
            && (isDecimal(clockTime.charAt(3)))
            && (isDecimal(clockTime.charAt(4)))
            && (clockTime.charAt(5) == ':')
            && (isDecimal(clockTime.charAt(6)))
            && (isDecimal(clockTime.charAt(7)));
}

function isDecimal(c) 
{
    return c <= '9' && c >= '0';
}
函数isPropertyForm(时钟时间)
{
返回(clockTime.length==8)
&&(isDecimal(clockTime.charAt(0)))
&&(isDecimal(clockTime.charAt(1)))
&&(clockTime.charAt(2)=':')
&&(isDecimal(clockTime.charAt(3)))
&&(isDecimal(clockTime.charAt(4)))
&&(clockTime.charAt(5)=':')
&&(isDecimal(clockTime.charAt(6)))
&&(isDecimal(clockTime.charAt(7));
}
函数为小数(c)
{
返回c='0';
}
正如您可能知道的,这是一个函数,我正在使用它来确定用户是否以正确的“hh:mm:ss”形式为文本框提供输入,该文本框用于接收以小时、分钟和秒表示时间的字符串


我不喜欢我的代码的外观,我想知道是否有一种更简单、更奇特的方法来实现它。

您可以使用正则表达式来实现这一点。有关教程,请参见

您可以使用正则表达式来完成此操作。有关教程,请参见

仅使用:

如果您不熟悉正则表达式语法,以下是每一部分的功能:

  • ^
    $
    锚定正则表达式以确保它应用于整个字符串。如果没有这个,正则表达式可以匹配字符串的一部分,并且仍然返回true
  • \d
    表示单个数字
  • {2}
    表示前面的匹配正好有两个,在本例中为
    \d
    。这就相当于
    \d\d
  • 仅表示文字冒号
如果要验证时间是否为实时(即不是45:73:89),可以使用更复杂的正则表达式:

// 12-hour time:
/^(1[0-2]|0[1-9]):[0-5]\d:[0-5]\d$/

// 24-hour time:
/^(2[0-3]|[01]\d):[0-5]\d:[0-5]\d$/
只需使用:

如果您不熟悉正则表达式语法,以下是每一部分的功能:

  • ^
    $
    锚定正则表达式以确保它应用于整个字符串。如果没有这个,正则表达式可以匹配字符串的一部分,并且仍然返回true
  • \d
    表示单个数字
  • {2}
    表示前面的匹配正好有两个,在本例中为
    \d
    。这就相当于
    \d\d
  • 仅表示文字冒号
如果要验证时间是否为实时(即不是45:73:89),可以使用更复杂的正则表达式:

// 12-hour time:
/^(1[0-2]|0[1-9]):[0-5]\d:[0-5]\d$/

// 24-hour time:
/^(2[0-3]|[01]\d):[0-5]\d:[0-5]\d$/

您可以使用以下正则表达式:

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
示例:

/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/.exec('12:20:30');
^                   # Start of string
(?:                 # Try to match...
 (?:                #  Try to match...
  ([01]?\d|2[0-3]): #   HH:
 )?                 #  (optionally).
 ([0-5]?\d):        #  MM: (required)
)?                  # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d)          # SS (required)
$                   # End of string
说明:

/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/.exec('12:20:30');
^                   # Start of string
(?:                 # Try to match...
 (?:                #  Try to match...
  ([01]?\d|2[0-3]): #   HH:
 )?                 #  (optionally).
 ([0-5]?\d):        #  MM: (required)
)?                  # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d)          # SS (required)
$                   # End of string
如果模式正常,则返回拆分字符串的数组,否则返回null

正则表达式在处理文本/字符串时要快得多

希望这有帮助


随时通知我。

您可以使用以下正则表达式:

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
示例:

/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/.exec('12:20:30');
^                   # Start of string
(?:                 # Try to match...
 (?:                #  Try to match...
  ([01]?\d|2[0-3]): #   HH:
 )?                 #  (optionally).
 ([0-5]?\d):        #  MM: (required)
)?                  # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d)          # SS (required)
$                   # End of string
说明:

/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/.exec('12:20:30');
^                   # Start of string
(?:                 # Try to match...
 (?:                #  Try to match...
  ([01]?\d|2[0-3]): #   HH:
 )?                 #  (optionally).
 ([0-5]?\d):        #  MM: (required)
)?                  # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d)          # SS (required)
$                   # End of string
如果模式正常,则返回拆分字符串的数组,否则返回null

正则表达式在处理文本/字符串时要快得多

希望这有帮助


请随时通知我。

如果我正在编写这样一个功能(从头开始),我将使用格式正则表达式和条件逻辑的组合来检查组件范围

下面是一个12小时的时钟,但是,通过保持逻辑分离,可以对其进行细微的更改,以支持24小时时钟格式,甚至支持部分格式,如“9:00”

功能有效时间(time){
//检查格式-\d{2}表示“匹配两位数字0..9”
var m=(time | |“”).match(/^(\d{2}):(\d{2}):(\d{2})$/)
//检查正确性
返回(m
&&m[1]>0&&m[1]为真
validTime(“23:59:59”)/>错误(12小时时钟上没有23)
上述代码依赖于几个观察结果:


  • str如果我写这样一个特性(从头开始),我会使用一个正则表达式作为格式和条件逻辑的组合来检查组件范围

    下面是一个12小时的时钟,但是,通过保持逻辑分离,可以对其进行细微的更改,以支持24小时时钟格式,甚至支持部分格式,如“9:00”

    功能有效时间(time){
    //检查格式-\d{2}表示“匹配两位数字0..9”
    var m=(time | |“”).match(/^(\d{2}):(\d{2}):(\d{2})$/)
    //检查正确性
    返回(m
    &&m[1]>0&&m[1]为真
    validTime(“23:59:59”)/>错误(12小时时钟上没有23)
    
    上述代码依赖于几个观察结果:


  • str为此使用正则表达式。
    /^\d{2}:\d{2}:\d{2}$/
    -更简单,IMOHO。(注意,与原始代码一样,此正则表达式测试格式,但不测试正确性。也就是说,它应该与实际逻辑结合使用,以检测
    99:88:77
    是垃圾,即使它是“有效格式”。)删除此问题并询问代码审阅。(现在太迟了。标记为迁移。)此问题似乎与主题无关,因为它要求代码审阅。请使用正则表达式进行此操作。/^\d{2}:\d{2}:\d{2}$/-更简单,IMOHO。(请注意,与原始代码一样,此正则表达式测试的是格式,而不是正确性。也就是说,它应该与实际逻辑结合使用,以检测
    99:88:77
    是垃圾,即使它是“有效格式”。)删除此问题并询问代码审阅。(现在太迟了。标记为迁移。)这个问题似乎离题了,因为它要求进行代码检查。如果翻译成其他语言:确保
    \d
    匹配ASCII数字(与所有Unicode数字相反;我可能只使用
    [0-9]
    ,但这是一个品味问题)并且
    ^
    $
    匹配字符串的开头和结尾(与字符串的开头和结尾相反)