Javascript 脚本中只允许数字和点
我使用这个javascript来限制用户只键入数字和一个点作为十进制分隔符Javascript 脚本中只允许数字和点,javascript,asp.net,regex,validation,Javascript,Asp.net,Regex,Validation,我使用这个javascript来限制用户只键入数字和一个点作为十进制分隔符 <script type="text/javascript"> function fun_AllowOnlyAmountAndDot(txt) { if(event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46) {
<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>
我犯了什么错 这是使用正则表达式的好地方 通过使用正则表达式,您可以用一行代码替换所有代码。 您可以使用以下正则表达式来验证您的需求:
[0-9]*\.?[0-9]*
换句话说:零个或多个数字字符,后跟零个或一个句点,后跟零个或多个数字字符
您可以将代码替换为以下内容:
function validate(s) {
var rgx = /^[0-9]*\.?[0-9]*$/;
return s.match(rgx);
}
该代码可以替换整个函数强>
<input onkeypress="return isNumber(event)" class="form-control">
请注意,必须用反斜杠转义句点(否则它代表“任意字符”)
有关在javascript中使用正则表达式的更多阅读,请查看以下内容:
对上面使用的正则表达式的解释:
- 括号表示“括号内的任何字符”。您可以使用连字符(如上所述)来表示字符范围
表示“前一表达式的零个或多个”*
表示“零个或多个数字”[0-9]*
- 反斜杠用作句点的转义字符,因为句点通常表示“任何字符”
表示“零或前一个字符之一。”?
表示字符串的开头^
表示字符串的结尾$
- 以
开始正则表达式并以^
结束正则表达式可确保整个字符串符合正则表达式模式$
希望这有帮助 改用Jquery。将decimal类添加到文本框:
<input type="text" class="decimal" value="" />
检查这把小提琴:
希望有帮助。不要使用此选项:
onkeypress=“return fun\u AllowOnlyAmountAndDot(this);”
您应该使用以下选项:
onkeypress=“return fun\u AllowOnlyAmountAndDot(this.id);”
函数数值验证(txtvalue){
var e=event | | evt;//用于跨浏览器兼容性
var charCode=e.which | e.keyCode;
if(!(document.getElementById(txtvalue.id.value))
{
如果(字符码>31&(字符码<48 | |字符码>57))
返回false;
返回true;
}
否则{
var val=document.getElementById(txtvalue.id).value;
如果(charCode==46 | |(charCode>31&&(charCode>47&&charCode<58)))
{
var点=0;
点=val.indexOf(“.”,点);
如果(点>=1&&charCode==46)
{
返回false;
}
如果(点==1)
{
var lastdigits=val.substring(val.indexOf(“.”+1,val.length);
如果(lastdigits.length>=2)
{
警报(“仅允许小数点后两位”);
返回false;
}
}
返回true;
}
否则{
警报(“仅允许使用Numarics”);
返回false;
}
}
}
这对我最合适 我还对blur应用了货币格式化程序,其中小数部分四舍五入为2位,以防在使用parseFloat进行验证之后 获取和设置光标位置的函数来自Vishal Monpara的博客。我也用这些函数做了一些很好的聚焦。如果需要,可以轻松删除强制使用2个小数的2个代码块,并去掉set/get插入符号函数
<html>
<body>
<input type="text" size="30" maxlength="30" onkeypress="return numericValidation(this,event);" />
<script language="JavaScript">
function numericValidation(obj,evt) {
var e = event || evt; // for trans-browser compatibility
var charCode = e.which || e.keyCode;
if (charCode == 46) { //one dot
if (obj.value.indexOf(".") > -1)
return false;
else {
//---if the dot is positioned in the middle give the user a surprise, remember: just 2 decimals allowed
var idx = doGetCaretPosition(obj);
var part1 = obj.value.substr(0,idx),
part2 = obj.value.substring(idx);
if (part2.length > 2) {
obj.value = part1 + "." + part2.substr(0,2);
setCaretPosition(obj, idx + 1);
return false;
}//---
//allow one dot if not cheating
return true;
}
}
else if (charCode > 31 && (charCode < 48 || charCode > 57)) { //just numbers
return false;
}
//---just 2 decimals stubborn!
var arr = obj.value.split(".") , pos = doGetCaretPosition(obj);
if (arr.length == 2 && pos > arr[0].length && arr[1].length == 2)
return false;
//---
//ok it's a number
return true;
}
function doGetCaretPosition (ctrl) {
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
function setCaretPosition(ctrl, pos){
if(ctrl.setSelectionRange)
{
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
</script>
</body>
</html>
功能数字验证(obj、evt){
var e=event | | evt;//用于跨浏览器兼容性
var charCode=e.which | e.keyCode;
如果(charCode==46){//一个点
if(对象值索引of(“.”>-1)
返回false;
否则{
如果点位于中间,给用户一个惊喜,记住:只允许2小数。
var idx=doGetCaretPosition(obj);
var part1=对象值substr(0,idx),
第2部分=对象值子字符串(idx);
如果(零件2.长度>2){
obj.value=part1+““+part2.substr(0,2);
setCaretPosition(obj,idx+1);
返回false;
}//---
//如果不作弊,允许一个点
返回true;
}
}
else如果(charCode>31&(charCode<48 | | charCode>57)){//仅数字
返回false;
}
//---只有两个小数点顽固!
var arr=对象值拆分(“.”),pos=doGetCaretPosition(对象);
如果(arr.length==2&&pos>arr[0]。length&&arr[1]。length==2)
返回false;
//---
//好的,这是一个数字
返回true;
}
函数doGetCaretPosition(ctrl){
var CaretPos=0;//IE支持
if(文档选择){
ctrl.focus();
var Sel=document.selection.createRange();
Sel.moveStart('character',-ctrl.value.length);
CaretPos=Sel.text.length;
}
//Firefox支持
else if(ctrl.selectionStart | | ctrl.selectionStart=='0')
CaretPos=ctrl.selectionStart;
返回(CaretPos);
}
功能设置CaretPosition(ctrl,pos){
如果(ctrl.setSelectionRange)
{
ctrl.focus();
控制设置选择范围(位置,位置);
}
else if(ctrl.createTextRange){
var范围
<script type="text/javascript">
function numericValidation(txtvalue) {
var e = event || evt; // for trans-browser compatibility
var charCode = e.which || e.keyCode;
if (!(document.getElementById(txtvalue.id).value))
{
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
else {
var val = document.getElementById(txtvalue.id).value;
if(charCode==46 || (charCode > 31 && (charCode > 47 && charCode < 58)) )
{
var points = 0;
points = val.indexOf(".", points);
if (points >= 1 && charCode == 46)
{
return false;
}
if (points == 1)
{
var lastdigits = val.substring(val.indexOf(".") + 1, val.length);
if (lastdigits.length >= 2)
{
alert("Two decimal places only allowed");
return false;
}
}
return true;
}
else {
alert("Only Numarics allowed");
return false;
}
}
}
</script>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtHDLLevel" MaxLength="6" runat="server" Width="33px" onkeypress="return numericValidation(this);" />
</div>
</form>
<html>
<body>
<input type="text" size="30" maxlength="30" onkeypress="return numericValidation(this,event);" />
<script language="JavaScript">
function numericValidation(obj,evt) {
var e = event || evt; // for trans-browser compatibility
var charCode = e.which || e.keyCode;
if (charCode == 46) { //one dot
if (obj.value.indexOf(".") > -1)
return false;
else {
//---if the dot is positioned in the middle give the user a surprise, remember: just 2 decimals allowed
var idx = doGetCaretPosition(obj);
var part1 = obj.value.substr(0,idx),
part2 = obj.value.substring(idx);
if (part2.length > 2) {
obj.value = part1 + "." + part2.substr(0,2);
setCaretPosition(obj, idx + 1);
return false;
}//---
//allow one dot if not cheating
return true;
}
}
else if (charCode > 31 && (charCode < 48 || charCode > 57)) { //just numbers
return false;
}
//---just 2 decimals stubborn!
var arr = obj.value.split(".") , pos = doGetCaretPosition(obj);
if (arr.length == 2 && pos > arr[0].length && arr[1].length == 2)
return false;
//---
//ok it's a number
return true;
}
function doGetCaretPosition (ctrl) {
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
function setCaretPosition(ctrl, pos){
if(ctrl.setSelectionRange)
{
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
</script>
</body>
</html>
function isNumber(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 46 || charCode > 57)) {
return false;
}
return true;
}
<input id="deneme" data-mini="true" onKeyPress="return isNumber(event)" type="text"/>`
<input type="text" class="form-control" id="odometer_reading" name="odometer_reading" placeholder="Odometer Reading" onblur="odometer_reading1();" onkeypress='validate(event)' required="" />
<script>
function validate(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
</script>
<input type="text" class="decimal" value="" />
$('.decimal').keypress(function(evt){
return (/^[0-9]*\.?[0-9]*$/).test($(this).val()+evt.key);
});
onkeypress='return event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)'
function isNumber(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)&&(charCode!=46)) {
return false;
}
return true;
}
<input onkeypress="return isNumber(event)" class="form-control">
<script type="text/Javascript">
function checkDecimal(inputVal) {
var ex = /^[0-9]+\.?[0-9]*$/;
if (ex.test(inputVal.value) == false) {
inputVal.value = inputVal.value.substring(0, inputVal.value.length - 1);
}
}
</script>
$(document).on("input", ".numeric", function() {
this.value = this.value.match(/^\d+\.?\d{0,2}/);});