2012-03-12 61 views
-1

我期待的JavaScript來創建一個正則表達式執行以下操作:(「」)reg表達式的Javascript百萬行與限

  1. 允許爲1個或多個數字
  2. 然後有一個可選的時期
  3. 然後有一個可選的位數可達6

的背景是,我需要有人在數值上百萬進入,我想他們至少包括0,如果他們進入ŧ housands ......這樣他們就可以輸入以下命令:

1(將一百萬) 0.725(將725k) 10.5(將10M 500K)

我還需要確保該值沒有按超過725.00(或7.25億美元)。

在此先感謝。

+1

聽起來像是你只是要檢查的東西是一個數字,在給定的範圍內。這不需要正則表達式。 – Orbling 2012-03-12 21:03:09

+0

嘗試'parseFloat()',並檢查輸出與'isNaN()'有效。 (http://en.wikipedia.org/wiki/Law_of_the_instrument)問題 – Orbling 2012-03-12 21:04:21

+1

經典[工具規律。你正在使用錯誤的工具來完成這項工作。不要使用RegEx檢查數字邊界。 – zzzzBov 2012-03-12 21:14:37

回答

0

所以基本上你想要一個數字乘以10^6來獲得真正的價值。

這聽起來像是一個兩步;首先,驗證輸入的字符串是否符合您期望的格式(您可以非常輕鬆地使用正則表達式)。然後,將字符串解析爲數字變量並測試實際值。這樣的正則表達式看起來像"[0-9]{1,3}(\.[0-9]{1,6})?",基本上匹配一個數字最多3個整數和6個小數位,小數位和小數位是可選的。如果它符合這種模式,那麼它可以解析成一個數字,然後你就可以快速檢查你的號碼< = 725.

我真的不認爲創建一個可以驗證正確性的單一正則表達式是不可行的數字格式和包容性的最大範圍內,但這裏是一個開始:

"^(725(\.0{1,6})|(([7][2][0-4]|[7][0-1][0-9]|[1-6][0-9]{2}|[1-9][0-9]|[0-9])(\.[0-9]{1,6})?)$"

這將允許從零到724的任何自然整數,以小數部分最多6個位數從「.000001" 到」。 999999" 。它是分階段進行的;它將匹配720-724,或700-719,或任何三位數字高達699,或者任何兩位數字,或任何一個數字。然後,它也將顯式地匹配數量「725」,可選小數點和多達6個零。

編輯:當你使用這個模式,它併產生正確的結果,您的評論的狀態,我本來打算它作爲「不要做什麼」;這種模式比第一種解決方案的評估成本要高得多,只是爲了避免服務器端的規則檢查。無論如何你必須執行服務器端驗證;任何用戶的瀏覽器的範圍內進行的應該是犯罪嫌疑人,因爲用戶可以禁用JavaScript,或者甚至可以使用瀏覽器插件如Firebug讓你的HTML頁面的行爲,他希望的方式,而不是你設計的方式。

+0

我被光線蒙上了一層陰影。 reg表達式起作用,我添加了比較控件。謝謝! – user1165864 2012-03-12 21:29:41

1

這聽起來像:

/^(?!\d{4})(?![89]\d\d)(?!7[3-9]\d)(?!72[6-9])(?!725\.0*[1-9])(0|[1-9]\d*)(\.\d{1,6})$/ 

這意味着:

  • 不與四位數字開始(即,小於1000
  • 不與89啓動後跟兩位數字(即小於800
  • 不以73 - 01開頭後跟數字(即,小於730
  • 不與726開始 - 729(即,小於726
  • 不與725.後跟零首或更多個零開始,然後一非零數字(即小於或等於725.00)。
  • 開始要麼0,或1 - 9後跟零個或多個數字
  • 後,後面可以跟一個六位數字

    也就是說之間

一個小數點,其實我建議將上述內容作爲幾個單獨的檢查來實現,而不是像上面那樣將它們全部整理成一個正則表達式。特別是,「小於或等於 725.00」檢查可能更好地使用數字比較來實現;即使你確實想使用正則表達式,你可能也想從 0.1asefawe中將它作爲一個單獨的錯誤來檢測,所以你可以給出一個更精確的錯誤消息。

+0

只看這個正則表達式就足以證明它是這個工作的錯誤工具。 – zzzzBov 2012-03-12 21:15:51

+0

@zzzzBov:的確如此!艾倫玻利斯曾寫道:「小心圖靈坦克可以讓一切都變得可能,但沒有任何興趣是容易的。」正則表達式實際上並不是圖靈完成 - 甚至不是完全 - 但即使如此,我認爲他們證明了他的觀點。 :-) – ruakh 2012-03-12 21:17:44

+0

感謝您侮辱我,您的解釋非常有幫助。我決定採納你的建議,並在現場添加第二個驗證器。謝謝! – user1165864 2012-03-12 21:30:51