求一javascript正则表达式

it823247117 2011-08-15 10:04:09
条件:只能输入0到24,且是0.5的倍数,例如:0,0.5,1.0,1.5这种;[总之小数点右边只能是5或0,且大小在0到24]
谢谢各位大侠,请贴代码
...全文
228 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有正则处理这类问题倒不是不可以,但等你过几天维护的时候就会感觉很蛋疼。
把你改不了的代码用到项目的关键路径,就等于自己找麻烦。

var test = function(fn, cases){
var i, kiss, len = cases.length;

for(i = 0; i < len; i++){
kiss = cases[i];
if(!fn(kiss.expr) == kiss.result){
alert("用例:" + kiss.expr + "没有通过测试!");
return;
}
}

alert('全部用例通过!');
};


var checker1 = (function(){
var enables = {};

for(var i = 0; i <= 24; i += 0.5){
enables[i] = null;
}

return function(i){
return enables.hasOwnProperty(i);
};
})();

var checker2 = (function(){
var reg = new RegExp(
"^("
+ "([0-9](?:\\.5)?)"
+ "|(1[0-9](?:\\.5)?)"
+ "|(24|2[0-3](?:\\.5)?)"
+ ")$"
);

return function(i){
return reg.test(i);
}
})();

var cases = (function(){
var i, ret = [];

//正确用例
for(i = 0; i<= 24; i += 0.5){
ret.push({
expr : String(i),
result : true
});
}

//错误用例
ret = ret.concat(
{expr : "0.1", result : false},
{expr : "0.2", result : false},
{expr : "10.0", result : false},
{expr : "10.1", result : false},
{expr : "24.1", result : false},
{expr : "24.5", result : false}
);

return ret;
})();


//执行单元测试
test(checker1, cases);
test(checker2, cases);


  • 打赏
  • 举报
回复
var test = function(reg, cases){
var i, kiss, len = cases.length;

for(i = 0; i < len; i++){
kiss = cases[i];
if(!reg.test(kiss.expr) == kiss.result){
alert("用例:" + kiss.expr + "没有通过测试!");
return;
}
}

alert('全部用例通过!');
};

var reg = new RegExp(
"^("
+ "([0-9](?:\\.5)?)" //小于10
+ "|(1[0-9](?:\\.5)?)" //小于20
+ "|(24|2[0-3](?:\\.5)?)" //大于20
+ ")$"
);

var cases = (function(){
var i, ret = [];

//正确用例
for(i = 0; i<= 24; i += 0.5){
ret.push({
expr : String(i),
result : true
});
}

//错误用例
ret = ret.concat(
{expr : "0.1", result : false},
{expr : "0.2", result : false},
{expr : "10.0", result : false},
{expr : "10.1", result : false},
{expr : "24.1", result : false},
{expr : "24.5", result : false}
);

return ret;
})();


//执行单元测试
test(reg, cases);
燥动的心 2011-08-15
  • 打赏
  • 举报
回复
var arr = [11.3,32,14.5,15,9,25,23,24];
var pattern = /^(([0-1]?\d)|(2[1-3]))(\.5)?$/;
for( var i = 0 ; i <arr.length ; i++){
alert(arr[i]+" : "+pattern.test(arr[i]));
}
s1120624175 2011-08-15
  • 打赏
  • 举报
回复
正则不是不行 其实LZ不必麻烦 0~25 那就乘以2 0~48不能有小数就可以了
che253604783 2011-08-15
  • 打赏
  • 举报
回复
0.5的倍数,难道就不能用除法吗?
prototyper 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 s1120624175 的回复:]

引用 13 楼 prototyper 的回复:

如果不要求保留小数点后1位的话:
/^(?!24\.5)([1-2][0-4]|\d)(\.[05])?$/.test(...)

你这个14 到19不行哦
[/Quote]

/^(?!24\.5)(2[0-4]|1?[0-9])(\.[05])?$/.test(...)
s1120624175 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 prototyper 的回复:]

如果不要求保留小数点后1位的话:
/^(?!24\.5)([1-2][0-4]|\d)(\.[05])?$/.test(...)
[/Quote]
你这个14 到19不行哦
prototyper 2011-08-15
  • 打赏
  • 举报
回复
如果不要求保留小数点后1位的话:
/^(?!24\.5)([1-2][0-4]|\d)(\.[05])?$/.test(...)
诺维斯基 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 it823247117 的回复:]
引用 4 楼 soonfei 的回复:

引用 3 楼 knightzhuwei 的回复:
引用 2 楼 soonfei 的回复:

/^[1-2]?[0-4](\.[05])?$/
你试试

5就不符合

怎么说?
确定呀,如果输入5或5.0\5.5就不行呀!大哥
[/Quote]
哦,对,我忽略了
s1120624175 2011-08-15
  • 打赏
  • 举报
回复
改一下
^((24)|(((2[0-3])|(1[0-9])|[0-9])(\.(0|5))?))$
prototyper 2011-08-15
  • 打赏
  • 举报
回复
/^(?!24\.5)([1-2][0-4]|\d)\.[05]$/.test(...)
knightzhuwei 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 s1120624175 的回复:]

^([1-2][0-9]|[0-9])(\.(0|5))?$
[/Quote]
25也符合
s1120624175 2011-08-15
  • 打赏
  • 举报
回复
^([1-2][0-9]|[0-9])(\.(0|5))?$
it823247117 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soonfei 的回复:]

引用 3 楼 knightzhuwei 的回复:
引用 2 楼 soonfei 的回复:

/^[1-2]?[0-4](\.[05])?$/
你试试

5就不符合

怎么说?
[/Quote]只要我整数位里有大于4的数字就都通不过的
it823247117 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soonfei 的回复:]

引用 3 楼 knightzhuwei 的回复:
引用 2 楼 soonfei 的回复:

/^[1-2]?[0-4](\.[05])?$/
你试试

5就不符合

怎么说?
[/Quote]确实呀,如果输入5或5.0\5.5就不行呀!大哥
it823247117 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soonfei 的回复:]

引用 3 楼 knightzhuwei 的回复:
引用 2 楼 soonfei 的回复:

/^[1-2]?[0-4](\.[05])?$/
你试试

5就不符合

怎么说?
[/Quote]确定呀,如果输入5或5.0\5.5就不行呀!大哥
诺维斯基 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 knightzhuwei 的回复:]
引用 2 楼 soonfei 的回复:

/^[1-2]?[0-4](\.[05])?$/
你试试

5就不符合
[/Quote]
怎么说?
knightzhuwei 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 soonfei 的回复:]

/^[1-2]?[0-4](\.[05])?$/
你试试
[/Quote]
5就不符合
诺维斯基 2011-08-15
  • 打赏
  • 举报
回复
/^[1-2]?[0-4](\.[05])?$/
你试试
knightzhuwei 2011-08-15
  • 打赏
  • 举报
回复
又是用正则做这种事情。。非用正则不可吗
加载更多回复(3)

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧