itz*_*run 17 javascript regex asp.net validation
使用此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>
Run Code Online (Sandbox Code Playgroud)
但onkeypress(this)事件在该位置返回该函数中的对象所需错误
var amount = document.getElementById(txt).value;
Run Code Online (Sandbox Code Playgroud)
我的错在哪里?
jah*_*roy 41
这是使用正则表达式的好地方.
通过使用正则表达式,您可以只用一行替换所有代码.
您可以使用以下正则表达式来验证您的要求:
[0-9]*\.?[0-9]*
换句话说:零个或多个数字字符,后跟零个或一个句点,后跟零个或多个数字字符.
您可以使用以下代码替换代码:
function validate(s) {
var rgx = /^[0-9]*\.?[0-9]*$/;
return s.match(rgx);
}
Run Code Online (Sandbox Code Playgroud)
该代码可以取代您的整个功能!
请注意,您必须使用反斜杠转义句点(否则它代表"任何字符").
有关使用javascript使用正则表达式的更多信息,请查看以下内容:
你也可以在这里测试上面的正则表达式:
上面使用的正则表达式的解释:
括号表示" 这些括号内的任何字符 ".您可以使用连字符(如上所示)来指示一系列字符.
的*
意思是" 零个或多个先前的表达 ".
[0-9]*
表示" 零个或多个数字 "
反斜杠用作句点的转义字符,因为句点通常代表" 任何字符".
的?
意思是" 零或前一个字符中的一个."
该^
代表字符串的开头.
的$
表示字符串的结束.
启动正则表达式^
并结束它$
确保整个字符串遵循正则表达式模式.
希望这可以帮助!
nic*_*ist 16
请改用Jquery.在文本框中添加一个十进制类:
<input type="text" class="decimal" value="" />
Run Code Online (Sandbox Code Playgroud)
在JS中使用此代码.它检查多个小数,并限制用户只键入数字.
$('.decimal').keyup(function(){
var val = $(this).val();
if(isNaN(val)){
val = val.replace(/[^0-9\.]/g,'');
if(val.split('.').length>2)
val =val.replace(/\.+$/,"");
}
$(this).val(val);
});?
Run Code Online (Sandbox Code Playgroud)
检查这个小提琴:http://jsfiddle.net/2YW8g/
希望能帮助到你.
小智 9
而不是使用这个:
onkeypress="return fun_AllowOnlyAmountAndDot(this);"
你应该用这个:
onkeypress="return fun_AllowOnlyAmountAndDot(this.id);"
小智 6
function isNumberKey(evt,id)
{
try{
var charCode = (evt.which) ? evt.which : event.keyCode;
if(charCode==46){
var txt=document.getElementById(id).value;
if(!(txt.indexOf(".") > -1)){
return true;
}
}
if (charCode > 31 && (charCode < 48 || charCode > 57) )
return false;
return true;
}catch(w){
alert(w);
}
}
Run Code Online (Sandbox Code Playgroud)
<html>
<head>
</head>
<body>
<INPUT id="txtChar" onkeypress="return isNumberKey(event,this.id)" type="text" name="txtChar">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
小智 6
只需在输入文本中添加以下代码:
onkeypress='return event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)'
Run Code Online (Sandbox Code Playgroud)
小智 5
<input type="text" class="decimal" value="" />
$('.decimal').keypress(function(evt){
return (/^[0-9]*\.?[0-9]*$/).test($(this).val()+evt.key);
});
Run Code Online (Sandbox Code Playgroud)
我认为这个简单的解决方案可能是。