如何使用javascript验证十进制时间?

如何使用javascript验证十进制时间?,javascript,jquery,regex,Javascript,Jquery,Regex,用户以十进制格式输入时间 像 0.00//不正确 1.54//正确值 1.60//值不正确 1.59//正确值 我曾尝试创建一个正则表达式函数,但它对所有值都显示不正确 var regex = /^[0-9]\d*(((,?:[1-5]\d{3}){1})?(\.?:[0-9]\d{0,2})?)$/; if (args.Value != null || args.Value != "") { if (regex.test(args.Value)) { //Inpu

用户以十进制格式输入时间

  • 0.00
    //不正确
  • 1.54
    //正确值
  • 1.60
    //值不正确
  • 1.59
    //正确值
我曾尝试创建一个正则表达式函数,但它对所有值都显示不正确

var regex = /^[0-9]\d*(((,?:[1-5]\d{3}){1})?(\.?:[0-9]\d{0,2})?)$/;
 if (args.Value != null || args.Value != "") {
    if (regex.test(args.Value)) {
        //Input is valid, check the number of decimal places
        var twoDecimalPlaces = /\.\?:[1-5]\d{2}$/g;
        var oneDecimalPlace = /\.\?:[0-9]\d{1}$/g;
        var noDecimalPlacesWithDecimal = /\.\d{0}$/g;

        if (args.Value.match(twoDecimalPlaces)) {

            //all good, return as is
            args.IsValid = true;
            return;
        }
        if (args.Value.match(noDecimalPlacesWithDecimal)) {
            //add two decimal places
            args.Value = args.Value + '00';
            args.IsValid = true;
            return;
        }
        if (args.Value.match(oneDecimalPlace)) {
            //ad one decimal place
            args.Value = args.Value + '0';
            args.IsValid = true;
            return;
        }
        //else there is no decimal places and no decimal
        args.Value = args.Value + ".00";
        args.IsValid = true;
        return;
    } else
        args.IsValid = false;
} else
    args.IsValid = false;

使用数字可能更容易:

var time = (+args.Value).toFixed(2); // convert to float with 2 decimal places
if (time === args.Value) {
    // it's a valid number format
    if (time !== 0.0 && time < 24) {
        // the hours are valid
        if (time % 1 < 0.6) {
            // the minutes are valid
        }
    }
}
var-time=(+args.Value).toFixed(2);//转换为小数点后2位的浮点型
如果(时间===参数值){
//这是一个有效的数字格式
如果(时间!==0.0&&time<24){
//时间是有效的
如果(时间%1<0.6){
//会议记录有效
}
}
}
您可以将所有这些折叠成一行:

if (time === args.Value && time !== 0.0 && time < 24 && time % 1 < 0.6) {
}
if(时间===args.Value&&time!==0.0&&time<24&&time%1<0.6){
}
甚至是一个布尔/三元

var valid = time === args.Value && time !== 0.0 && time < 24 && time % 1 < 0.6;
alert( time === args.Value && time !== 0.0 && time < 24 && time % 1 < 0.6 ? 'valid' : 'invalid' );
var valid=time==args.Value&&time!==0.0&&time<24&&time%1<0.6;
警报(时间===args.Value&&time!==0.0&&time<24&&time%1<0.6?'valid':'invalid');

您的正则表达式比您的测试用例显示的更复杂?为什么是正则表达式?在
上拆分,检查边界,parseInt()并检查数字范围,如果需要,转换为字符串添加
0
。24小时格式还是12小时?嘿,乔,你的解释很好。但我需要做的不是60,而是60,因为你们已经得到了这个模块,剩下的就是得到了。我调试并检查不同的值,类似于0.25 0.89 0.66 0.59等格式。顺便说一句,谢谢你的回复。这是一个很好的陷阱——愚蠢的错误:)更新帖子以供其他人参考。很高兴它帮助了你