Validation javascript中的文本框百分比验证

Validation javascript中的文本框百分比验证,validation,Validation,我们如何在文本框中验证百分比数字。 我需要验证这些类型的数据 例:12-3,33.44a,44,a3.56123 提前谢谢 sri如果您正在谈论检查给定文本是否为有效百分比,您可以做以下几件事之一 使用类似于^[0-9]+\.?[0-9]*$的正则表达式对其进行验证,然后将其转换为浮点值,并检查其是否介于0和100之间(对于小于1的值,特定正则表达式要求小数点前有一个零,但您可以调整它以处理其他情况) 使用在无效数据上引发异常的方法将其转换为浮点(而不是在第一个坏字符处停止) 使用一个复杂的正

我们如何在文本框中验证百分比数字。 我需要验证这些类型的数据

例:12-3,33.44a,44,a3.56123

提前谢谢
sri

如果您正在谈论检查给定文本是否为有效百分比,您可以做以下几件事之一

  • 使用类似于
    ^[0-9]+\.?[0-9]*$
    的正则表达式对其进行验证,然后将其转换为浮点值,并检查其是否介于0和100之间(对于小于1的值,特定正则表达式要求小数点前有一个零,但您可以调整它以处理其他情况)
  • 使用在无效数据上引发异常的方法将其转换为浮点(而不是在第一个坏字符处停止)
  • 使用一个复杂的正则表达式来检查有效的条目,而不必转换为浮点
  • 只需逐个字符计算数字(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*$