2011-06-23 29 views
44

我想知道是否有可能在if語句正則表達式中使用。我想檢查一個值是否在可接受的範圍內。如果是的話,做別的事情。檢查if條件中的數字範圍

範圍是0.001-0.009。我知道如何使用多個if來檢查這一點,但我想知道是否有任何方法用正則表達式在單個if語句中檢查它。

+6

' &&'操作符? ... –

回答

113

你在問一個關於數字比較的問題,所以正則表達式實際上與這個問題無關。你並不需要「多if」語句來做到這一點,無論是:

if (x >= 0.001 && x <= 0.009) { 
    // something 
} 

你可以自己寫一個「之間()」函數:

function between(x, min, max) { 
    return x >= min && x <= max; 
} 
// ... 
if (between(x, 0.001, 0.009)) { 
    // something 
} 
+2

是的,正則表達式不適合這個任務,但他想要一個正則表達式。你的代碼解決了任務,但不是他的問題。 – Leif

+49

這是一個旨在幫助人們的網站。我認爲這不利於提供一個不好的解決方案。 – Pointy

+0

你的編碼是好​​的,但它不適合這個問題,就是這樣。沒有冒犯的意思。我總是通過對問題的回答有多好來判斷解決方案。那是因爲我通常假設人們知道他們要求什麼。該複選標記向我顯示,這個提問者並不是這種情況。 – Leif

12

如果必須使用正則表達式(!真的,你不應該),這將工作:

/^0\.00([1-8]\d*|90*)$/ 

應該工作,即

  • ^之前什麼,
  • 接着0.00(NB:反斜槓轉義用於.字符),隨後加入1至8
  • ,並且任何數量的額外的數字
  • 或9,隨後通過任何數量的零
  • $:其次是沒有別的
-5

尖是正確的,但如果你使用的CoffeeScript,語法看有點兒像紅寶石

shipping = (x) -> 
    switch 
    when 0 <= x <= 1500 
     150 
    when 1501 <= x <= 4000 
     350 
    when 4001 <= x <= 8000 
     550 
    when 8001 <= x <= 12000 
     750 
    when 12001 <= x <= 20000 
     950 
    when 20001 <= x <= 40000 
     1500 
    else 3000 
1

我喜歡尖尖的between功能,所以我寫了一個類似的,對於我的方案行之有效。

/** 
* Checks if an integer is within ±x another integer. 
* @param {int} op - The integer in question 
* @param {int} target - The integer to compare to 
* @param {int} range - the range ± 
*/ 
function nearInt(op, target, range) { 
    return op < target + range && op > target - range; 
} 

所以如果你想看看是否x是內y 10±:

var x = 100; 
var y = 115; 
nearInt(x,y,10) = false 

我使用它的移動檢測長按:

//make sure they haven't moved too much during long press. 
if (!nearInt(Last.x,Start.x,5) || !nearInt(Last.y, Start.y,5)) clearTimeout(t);