我正在使用此 javascript 来限制用户只能键入数字,并且只能键入一个点作为小数点分隔符。
<script type="text/javascript">
function fun_AllowOnlyAmountAndDot(txt)
{
if(event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46)
{
var txtbx=document.getElementById(txt);
var amount = document.getElementById(txt).value;
var present=0;
var count=0;
if(amount.indexOf(".",present)||amount.indexOf(".",present+1));
{
// alert('0');
}
/*if(amount.length==2)
{
if(event.keyCode != 46)
return false;
}*/
do
{
present=amount.indexOf(".",present);
if(present!=-1)
{
count++;
present++;
}
}
while(present!=-1);
if(present==-1 && amount.length==0 && event.keyCode == 46)
{
event.keyCode=0;
//alert("Wrong position of decimal point not allowed !!");
return false;
}
if(count>=1 && event.keyCode == 46)
{
event.keyCode=0;
//alert("Only one decimal point is allowed !!");
return false;
}
if(count==1)
{
var lastdigits=amount.substring(amount.indexOf(".")+1,amount.length);
if(lastdigits.length>=2)
{
//alert("Two decimal places only allowed");
event.keyCode=0;
return false;
}
}
return true;
}
else
{
event.keyCode=0;
//alert("Only Numbers with dot allowed !!");
return false;
}
}
</script>
<td align="right">
<asp:TextBox ID="txtQ1gTarget" runat="server" Width="30px" CssClass="txtbx" MaxLength="6" onkeypress="return fun_AllowOnlyAmountAndDot(this);"></asp:TextBox>
</td>
但是 onkeypress(this) 事件在这个地方的那个函数中返回了 object required error
var amount = document.getElementById(txt).value;
我这里有什么错误?
最佳答案
这是使用正则表达式的好地方。
通过使用正则表达式,您只需一行即可替换所有代码。
您可以使用以下正则表达式 来验证您的要求:
[0-9]*\.?[0-9]*
换句话说:零个或多个数字字符,后跟零个或一个句点,再后跟零个或多个数字字符。
你可以用这个替换你的代码:
function validate(s) {
var rgx = /^[0-9]*\.?[0-9]*$/;
return s.match(rgx);
}
该代码可以替代您的整个功能!
请注意,您必须使用反斜杠对句点进行转义(否则它代表“任何字符”)。
有关在 javascript 中使用正则表达式的更多信息,请查看:
你也可以在这里测试上面的正则表达式:
上面使用的正则表达式的解释:
方括号表示“这些方括号内的任何字符”。您可以使用连字符(如上)来指示一系列字符。
*
表示“前一个表达式的零个或多个。”[0-9]*
表示“零个或多个数字”反斜杠用作句点的转义字符,因为句点通常代表“任何字符”。
?
表示“前一个字符的零个或一个。”^
表示字符串的开头。$
代表一个字符串的结尾。以
^
开始正则表达式并以$
结束正则表达式确保整个字符串符合正则表达式模式。
希望这对您有所帮助!
关于javascript - 脚本中只允许数字和点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9799505/