2012-06-07 286 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」)來處理前導零。 –

相關問題