2012-10-08 80 views
1

我很接近,但我需要一些幫助來完成正則表達式。這裏是我們的目標:3到50之間的美元金額正則表達式

能成功:

  • 10.05
  • 3.00

應該失敗:

  • 55.99(> 50)
  • 3.001 (不能有 「1」 的端部)
  • 0.50(< 3)
  • 0.99(< 3)
  • $ 50(不能有 「$」)
  • 5.2(如果小數,必須有後2位)

這裏的正則表達式我有這麼遠,但它並不完全做到以上正確:

^([1-4][0-9]|50|[3-9])+(\.[0-9][0-9])?$ 

任何人都可以共享answe R'謝謝!

+1

不要使用數學正則表達式。檢查輸入格式,然後解析數字並檢查你的條件 – Bergi

+0

'010.00'呢? –

回答

0

我發現了一個online utility當輸入範圍的下限和上限您希望返回整數正則表達式。我將它用於.之前的部分,限制爲3-50,之後的部分爲.,限制爲0-99。結果如下:

^0*([3-9]|[1-4][0-9]|50)(\.[0-9]{2})?$ 
+0

Argh。這也是失敗的。感謝迄今爲止的幫助......有人必須得到答案。僅供參考,我使用www.radsoftware.com.au(無隸屬關係)。 – Mark

+0

@Mark我編輯了正則表達式。它現在應該通過所有的測試。 – halex

+0

我們有一個贏家!謝謝大家。 – Mark

0

快速瀏覽...只是刪除+

^([1-4] [0-9] | 50 | [3-9])。([0-9] [0-9 ])?$

+0

這也失敗了(例如55。99) – Mark

2
^(50(\.00)?|([1-4][0-9]|[3-9])(\.[0-9][0-9])?)$ 

有兩個問題。首先,即使之前的值是50,你也允許小數點後的非零值。因此,我將它分離出頂層。其次,只需刪除+。因爲由於它,你可以有更多的數字(例如通過鏈接5043)。

但是,正如Bergi在評論中提到的那樣,最好只檢查格式,並單獨進行範圍檢查(不使用正則表達式)。這將是格式檢查:

^\d+(\.\d\d)?$ 
+0

感謝您的快速回復,但頂級正則表達式允許我的一些失敗情況。 – Mark

+1

@標記哪些具體?使用PHP,您的所有失敗案例都會在我的機器上失敗。 –

0

你應該潛在美分之前刪除+。此外,您需要處理50美元作爲特例,因爲它只能在.00之後,而不是任何美分。

而且,我改變了[0-9]的快捷方式位數:\d

/^((0?[3-9]|[1-4]\d)(\.\d\d)?|50(\.00)?)$/ 
+0

這也失敗了我的一些情況。 – Mark

+0

真的,你的意思是?順便說一句,我的正則表達式相當於@ m.buettner的一個從上面 – Bergi

+0

@Bergi,顯然我的並不完美(雖然對我來說它不允許任何失敗的情況下) –