2012-06-07 96 views
0

我用正则表达式编写了以下js。它按预期工作,但我期望简化它。有人能帮我吗?使用正则表达式的正则表达式数字

0.12345 - 成功

0.12345 - 成功

12345.12345 - 成功

0.123456失败 - 这一点,我希望是动态的,而不是仅限于5

1.123.45失败

1 ..失败

..失败

ABC - 失败

function clearNonNumericChars(field) {   
    field.val(field.val().replace(/([^0-9\.])/g,"")); 
    field.val(field.val().replace(/^(\d*\.[0-9]{5})\d+$/g,"$1")); 
    field.val(field.val().replace(/(\.\d*)(\.)$/g,"$1")); 
} 
+2

现场测试是'.'强制性?即,你是否希望'725'通过或失败?那'725.'呢? – OmnipotentEntity

+1

你想达到什么目的?成功/失败意味着什么? – ddlshack

+0

目前尚不清楚你的目标是什么。你想有一个验证函数,如果给出的参数不是一个有效的数字,它将返回false?或者你想“清理”给出的任何字符串以获得有效的数字?在最后的情况下,约束是什么? – ZER0

回答

1

不要以数字作为字符串处理。

isNumberValid = function(n) { 
    return (n == Math.round(n*10000)/10000) 
} 
+0

这只是告诉我它是否是数字,它不允许我删除键盘上的非数字字符。 –

+3

@George:你从来没有说过要做这样的事情。 –

+0

我认为我的想法仍然在表达,我的道歉。 –

1

如果你不需要一个正则表达式,如果你正在做keyup的话,你不需要一个正则表达式。只需通过keycode /在您的事件处理程序中进行筛选。你标记的问题jQuery的,所以:

$('input').on('keyup', function (e) { 
    if ($.inArray(e.which, [48,49,50,51,52,53,54,55,56,57,190]) === -1) { 
     return true; 
    } 

    return false; 
}); 

注意我还没有真正测试过,但是这基本上使得它,使用户无法进入任何东西,但数字或小数。请注意,他们仍然可以粘贴不良字符。我将把解决方案留给读者...

0

这是你在找什么? >>

var str = "1a2..b3.C4;56"; 
str = str.replace(/[^0-9\.]/g,"").replace(/\./,",").replace(/\./g,"").replace(/,/,"."); 
print(str); 

http://ideone.com/F7wWV

+0

另外,您可以附加'.replace(/^0 + /,“”)或'.replace(/^0 + /,“0”)来处理前导零。 –