我有以下代码
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';
}
正如您可能知道的那样,我正在使用的函数来确定用户是否以适当的“hh:mm:ss”形式为文本框提供输入,该文本框用于表示时间的字符串以小时,分钟和秒为单位。
我不喜欢我的代码外观,我想知道是否有一种更简单,更漂亮的方式。
答案 0 :(得分:4)
只需使用regular expression:
function isProperTimeForm(clockTime) {
return /^\d{2}:\d{2}:\d{2}$/.test(clockTime);
}
如果您不熟悉正则表达式语法,请按以下步骤操作:
^
和$
锚定正则表达式以确保它适用于整个字符串。如果没有这个,正则表达式可以匹配字符串的部分并仍然返回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$/
答案 1 :(得分:0)
您可以使用正则表达式来执行此操作。有关教程,请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
答案 2 :(得分:0)
您可以使用以下正则表达式:
^(?:(?:([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
如果模式正常,则返回分割字符串的数组,否则返回null
正则表达式在文本/字符串操作方面要快得多。
希望这有帮助。
让我发布。
答案 3 :(得分:0)
如果我正在编写这样的功能(从头开始),我会使用格式的正则表达式和条件逻辑的组合来检查组件范围。
以下是12小时制,但通过保持逻辑分离,可以轻易改变以支持24小时时钟格式 - 甚至是部分格式,如“9:00” ”
function validTime(time) {
// check format - \d{2} means "match two digits 0..9"
var m = (time || "").match(/^(\d{2}):(\d{2}):(\d{2})$/)
// check correctness
return (m
&& m[1] > 0 && m[1] <= 12
&& m[2] <= 59
&& m[3] <= 59)
}
validTime() // -> false
validTime("00:11:22") // -> false (no 00 on 12-hour clock)
validTime("12:59:59") // -> true
validTime("23:59:59") // -> false (no 23 on 12-hour clock)
以上代码依赖于几个观察结果:
str <= num
大致相当于parseFloat(str) <= num