求一个JavaScript算法

发布网友 发布时间:2022-04-21 21:08

我来回答

4个回答

热心网友 时间:2022-04-22 20:29

试试我这个,可用键位包括退格、delete、左右箭头、大小键盘的点和数字。非法输入(非法键位、小数位超过2)将还原输入。
<input type="text" id="price"></input>

<script type="text/javascript">
var oldValue = '';

//定义一下可用键位
var accessValue = [8,46,13,37,39,110,190]; //退格,delete,enter,左箭头,右箭头,小键盘点,键盘点
for(i=48;i<=57;i++) accessValue.push(i); //键盘数字
for(i=96;i<=105;i++) accessValue.push(i); //小键盘数字

//输入响应
document.getElementById('price').onkeyup = function(e){
e = e || window.event;
var code=e.keyCode || e.which;

if(!accessValue.in_array(code)) {
this.value = oldValue; //还原数据
return false; //110是点,96-105是0-9
}
if(!this.value.match(/^\d*(\.\d{0,2})?$/)) {
this.value = oldValue; //还原数据
return false;
}
oldValue = this.value;
};

//定义in_array函数
Array.prototype.S=String.fromCharCode(2);
Array.prototype.in_array=function(e) {
var r=new RegExp(this.S+e+this.S);
return (r.test(this.S+this.join(this.S)+this.S));
}
</script>

热心网友 时间:2022-04-22 21:47

首先对你关注用户体验的精神表示支持。

仅对于你的问题补充进行一下交流:
因为用户的录入方式还是比较花样繁多的,所以你的验证js也许还会面临一些挑战。
比如你既然想到了backspace键,那么对于delete键如何处理呢,如果当作非法键来处理的话,对于习惯小键盘录入数字的人来说还是不太舒服的。
或是用户选中文本框内一部分数字后按下backspace键,或是用户调用输入法,或是ctrl+v粘贴入文本......

当然我绝对不是在挑错找碴,只是提一些建议:
如果需要适应这些录入方式的话,必然要写很多的js代码,并且有一个问题:用户可以禁掉javascript。所以觉得对于验证而言,后台为主,js在前台为辅。我们的最终目的其实只有两种,对于正确录入值进行操作,对于错误值进行拦截。当然话说回来,如果你的需求确实是严苛的前台验证的话,那加油吧。

以上。

热心网友 时间:2022-04-22 23:21

可以用正则表达式
var partten=/^\d+(\.\d{2})?$/;
if (!partten.test(value)){
return false;
}追问谢谢你的回答,请看我的问题补充。

热心网友 时间:2022-04-23 01:13

用正则最方便

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com