2013-04-09 98 views
-1

我與regex一個新手,我需要-180和180之間的整數用於數的正則表達式或浮動,每次最多6個小數正則表達式浮動正極和負極和6小數

+0

我想知道爲什麼你需要一個正則表達式。你不能只是'x <180 && x> -180'嗎? – 2013-04-09 14:48:41

+0

@JanDvorak OP可能試圖在更大的字符串中搜索這樣的數字,而不僅僅是驗證。 – iamnotmaynard 2013-04-09 14:51:45

回答

1

注意正則表達式無法驗證是否數字實際上是在你給出的範圍之間 - 這應該由你的業務邏輯來處理。

^-?\d{0,3}(\.\d{0,6})?$ 

這可能是一個更好的解決方案在數字閱讀,在JavaScript分析它,並驗證這樣的說法:

http://jsfiddle.net/4dqqh/

function isValid(numStr) { 
    var float = parseFloat(numStr); 
    return Math.abs(float) <= 180 && float.toFixed(6) - float == 0 
} 

console.log(isValid('-123.23323')); // true 
console.log(isValid('-183.23323')); // false 
console.log(isValid('-183.233233424')); // false 
+2

那麼,你可以創建一個只允許所需範圍內的值的正則表達式,但業務邏輯對它來說是一個更好的地方。 – iamnotmaynard 2013-04-09 14:49:30

+0

正確,請參閱我的更新:) – 2013-04-09 14:52:29

+0

'float.toFixed(6) - float == 0' - 是否應該接受'1.000000000'? – 2013-04-09 14:53:26

0

您可以檢查該值可以轉換到你需要的範圍和精度的數字,但是正則表達式不是那個工具。

function numbercheck180(s){ 
    var n= !isNaN(n= s*1e6)? Math.round(n)/1e6:-181; 
    return (n<180 && n>-180 && n+''=== s) 
} 


numbercheck180('-179.123456') true 
numbercheck180('179.123456') true 
numbercheck180('179.1234561') false 
numbercheck180('-179.1234561') false 
numbercheck180('-181') false 
numbercheck180('180.00001') false