2013-05-07 45 views
0

我有一個文本輸入字段,用戶只能輸入一個double。 我已經成功地使用jQuery來實現這一點,但沒有太多的正則表達式的經驗我不知道如果正在使用的正則表達式(它使用多個OR)是一個很好的方法來做到這一點。我花了很多時間試圖獲得一個簡單的正則表達式,但我沒有成功。這是我最終使用的。動態雙驗證Javascript正則表達式

這裏是我使用的功能:

$('#foo').keyup(function(){ 
    var str = $(this).val(); 
    if(/(^\.+$)|(^\d+$)|(^\d+\.$)|(^\.\d+$)|(^\d+\.\d+$)/.test(str)){ 
     $('#foosays').text(str); 
    }else{ 
     $("#foo")[0].value=""; 
    } 
}); 

這裏是我的功能演示:http://jsfiddle.net/Esfsy/

任何建議,以改善正則表達式或其他任何東西都歡迎。

+0

在JavaScript所有的數字都是雙打......您可能希望將字符串轉換爲數字,並使用'isNaN'用'toFixed'而不是正則表達式。 – elclanrs 2013-05-07 22:07:31

+0

只是好奇爲什麼這個問題被標記爲'關閉'? – rgamber 2013-05-07 22:15:36

+1

看看這個頁面的相關正則表達式:http://www.regular-expressions.info/floatingpoint.html – Xotic750 2013-05-07 22:21:49

回答

3

您可以簡化它是這樣的:

http://jsfiddle.net/Esfsy/3/

$('#foo').keyup(function(){ 
    var str = $(this).val(); 
    if(/^-?(\d*\.)?\d*$/.test(str)){ 
     $('#foosays').text(str); 
    }else{ 
     $("#foo")[0].value=""; 
    } 
}); 
+0

,這將不允許負面... – dandavis 2013-05-07 22:14:28

+0

謝謝!我花了很多時間試圖通過這種方式得到正則表達式!我想我有更多的閱讀要做。 – rgamber 2013-05-07 22:14:59

+0

@dandavis這是真的,我編輯了我的答案來解釋否定。 – thebreiflabb 2013-05-07 22:16:37

1
$('#foo').keyup(function(){ 
    var str = $(this).val(); 
    if(+str || str==='0'){ // validates as a number 
     $('#foosays').text(str); 
    }else{ 
     $("#foo")[0].value=""; 
    } 
}); 
+0

感謝這個簡單的方法!你能告訴我這個+ str做什麼? – rgamber 2013-05-07 22:12:28

+0

+將其變成一個數字。您還可以使用1 * s或Number(s)以獲得更好的可讀性。 – dandavis 2013-05-07 22:13:59

+0

現在它是有道理的。謝謝! – rgamber 2013-05-07 22:16:04