Validation javascript中的文本框百分比验证
我们如何在文本框中验证百分比数字。 我需要验证这些类型的数据 例:12-3,33.44a,44,a3.56123 提前谢谢Validation javascript中的文本框百分比验证,validation,Validation,我们如何在文本框中验证百分比数字。 我需要验证这些类型的数据 例:12-3,33.44a,44,a3.56123 提前谢谢 sri如果您正在谈论检查给定文本是否为有效百分比,您可以做以下几件事之一 使用类似于^[0-9]+\.?[0-9]*$的正则表达式对其进行验证,然后将其转换为浮点值,并检查其是否介于0和100之间(对于小于1的值,特定正则表达式要求小数点前有一个零,但您可以调整它以处理其他情况) 使用在无效数据上引发异常的方法将其转换为浮点(而不是在第一个坏字符处停止) 使用一个复杂的正
sri如果您正在谈论检查给定文本是否为有效百分比,您可以做以下几件事之一
- 使用类似于
的正则表达式对其进行验证,然后将其转换为浮点值,并检查其是否介于0和100之间(对于小于1的值,特定正则表达式要求小数点前有一个零,但您可以调整它以处理其他情况)^[0-9]+\.?[0-9]*$
- 使用在无效数据上引发异常的方法将其转换为浮点(而不是在第一个坏字符处停止)
- 使用一个复杂的正则表达式来检查有效的条目,而不必转换为浮点
- 只需逐个字符计算数字(a)、小数点(b)和非数字(c)即可。如果
至少为一,a
最多为一,b
为零,则转换为浮点c
然而,我倾向于选择选项1、2、4和3(按顺序),因为我不太喜欢复杂的正则表达式。我倾向于认为,当它们在不到三秒钟内变得复杂易懂时,弊大于利。您可以进一步优化此表达式。目前它适用于所有给定的模式
^\d*[aA]?[\-.]?\d*[aA]?[\-.]?\d*$
最后,我尝试了一个简单的验证,效果很好:-( 函数验证(){ var str=document.getElementById('percentage')。值; 如果(isNaN(str)) { //警报(“值超出范围或小数点过多”); } 否则,如果(str>100) { //警报(“超出值”); } else if(str<0){ //警报(“值无效”); } }添加文本框
<asp:TextBox ID="PERCENTAGE" runat="server"
onkeypress="return ispercentage(this, event, true, false);"
MaxLength="18" size="17"></asp:TextBox>
<script type="text/javascript">
function ispercentage(obj, e, allowDecimal, allowNegative)
{
var key;
var isCtrl = false;
var keychar;
var reg;
if (window.event)
{
key = e.keyCode;
isCtrl = window.event.ctrlKey
}
else if (e.which)
{
key = e.which;
isCtrl = e.ctrlKey;
}
if (isNaN(key)) return true;
keychar = String.fromCharCode(key);
// check for backspace or delete, or if Ctrl was pressed
if (key == 8 || isCtrl)
{
return true;
}
ctemp = obj.value;
var index = ctemp.indexOf(".");
var length = ctemp.length;
ctemp = ctemp.substring(index, length);
if (index < 0 && length > 1 && keychar != '.' && keychar != '0')
{
obj.focus();
return false;
}
if (ctemp.length > 2)
{
obj.focus();
return false;
}
if (keychar == '0' && length >= 2 && keychar != '.' && ctemp != '10') {
obj.focus();
return false;
}
reg = /\d/;
var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;
return isFirstN || isFirstD || reg.test(keychar);
}
</script>
按原样复制下面的功能并粘贴到标签中。
<asp:TextBox ID="PERCENTAGE" runat="server"
onkeypress="return ispercentage(this, event, true, false);"
MaxLength="18" size="17"></asp:TextBox>
<script type="text/javascript">
function ispercentage(obj, e, allowDecimal, allowNegative)
{
var key;
var isCtrl = false;
var keychar;
var reg;
if (window.event)
{
key = e.keyCode;
isCtrl = window.event.ctrlKey
}
else if (e.which)
{
key = e.which;
isCtrl = e.ctrlKey;
}
if (isNaN(key)) return true;
keychar = String.fromCharCode(key);
// check for backspace or delete, or if Ctrl was pressed
if (key == 8 || isCtrl)
{
return true;
}
ctemp = obj.value;
var index = ctemp.indexOf(".");
var length = ctemp.length;
ctemp = ctemp.substring(index, length);
if (index < 0 && length > 1 && keychar != '.' && keychar != '0')
{
obj.focus();
return false;
}
if (ctemp.length > 2)
{
obj.focus();
return false;
}
if (keychar == '0' && length >= 2 && keychar != '.' && ctemp != '10') {
obj.focus();
return false;
}
reg = /\d/;
var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;
return isFirstN || isFirstD || reg.test(keychar);
}
</script>
功能百分比(obj、e、allowDecimal、allowNegative)
{
var键;
var isCtrl=false;
var-keychar;
var-reg;
if(window.event)
{
key=e.keyCode;
isCtrl=window.event.ctrlKey
}
否则,如果(例如,哪个)
{
key=e.which;
isCtrl=e.ctrlKey;
}
if(isNaN(key))返回true;
keychar=String.fromCharCode(键);
//检查是否有退格或删除,或者是否按了Ctrl键
如果(键==8 | | isCtrl)
{
返回true;
}
ctemp=目标值;
var指数=ctemp.indexOf(“.”);
变量长度=ctemp.length;
ctemp=ctemp.子字符串(索引,长度);
如果(索引<0&&length>1&&keychar!='.&&keychar!='0')
{
obj.focus();
返回false;
}
如果(ctemp.length>2)
{
obj.focus();
返回false;
}
如果(keychar='0'&&length>=2&&keychar!='.&&ctemp!='10'){
obj.focus();
返回false;
}
reg=/\d/;
var isFirstN=allowNegative?keychar='-'&&obj.value.indexOf('-')==-1:false;
var isFirstD=allowDecimal?keychar='.'和&obj.value.indexOf('.')=-1:false;
返回isFirstN | | isFirstD | | |注册测试(keychar);
}
您指的是小数点吗?小数点是可选的。但在提供时应进行验证。认为这不是验证2点,例如:1.2.3我像tis var regexpatern=/^\d*[aA]?[\-.]?\d*[aA]?[\-.]?\d*$/;如果(!regexpatern.test(str)){alert(“值超出范围或小数点过多”);}在这种情况下是否替换?[which matched 0或1引用]by*[which matched 0或更多引用]。现在,您的表达式将是^\d*[aA]*[\-.]*\d*[aA]*[\-.]*\d*$