2011-04-15 40 views
0

RegEx for BMHT in a sequence是我以前的帖子。 我正在尋找使用縮寫建立一個數字,以及使用正則表達式的課程。使用縮寫準備號碼

現在我知道如何用BMTH縮寫來驗證數字。

現在我的下一個也是最後一個目標是使用縮寫建立一個數字。 例如-2T2H22.55應顯示爲-2,222.55 -2M2H22.63應顯示爲-2,000,222.63

幫助讚賞。

+0

你使用什麼編程語言? – stema 2011-04-15 10:30:11

+0

我正在使用Flex。看起來像Flex有一些問題。我創造了這個表達式:(?:\ d + B)?(?:\ d {1,3} M)?(?:\ d {1,3} T)?(?:\ d {1} ?(\。[0-9] *)?在RegExr中工作正常,但從未在Flex中工作。 – prasanna 2011-04-15 10:32:48

+0

我不知道Flex和它使用的正則表達式引擎。您可以嘗試避免不捕捉羣體,即刪除'?:'。捕獲的值將被存儲到變量中(您不必使用它們)。在我看來,這是我看到的唯一可能有問題的事情。 – stema 2011-04-15 10:46:20

回答

3

Flex的腳本語言ActionScript是一種像JavaScript這樣的ECMAScript實現,因此正則表達式文本必須用斜線分隔,例如:/^(?:\d+B)?(?:\d{1,3}M)?(?:\d{1,3}T)?(?:\d{1}H)?(\.[0-9]*)?/

但是,該正則表達式仍然存在一些問題。首先,你不會在百位以後考慮減號或兩位數字。而且,雖然小數點可以是可選的,但如果它目前您應該要求它後面至少有一個數字(因此+,而不是最後一組中的*)。

最後,您需要捕獲各種組件,以便您可以使用它們來構造數字。這裏是我的結果:

/^(-?)(?:(\d+)B)?(?:(\d{1,3})M)?(?:(\d{1,3})T)?(?:(\d)H)?(\d{0,2})(\.\d+)?$/ 

減號,如果存在的話,將在小組$1抓獲。其餘組件將分組$2$7。您可以在回調函數中使用它們來構造數字。另外,請注意,這個正則表達式中的所有內容都是可選的;它會匹配一個空字符串或只是一個連字符,所以你需要檢查。

+0

哇,非常詳細的答案。好jorb;) – 2011-04-15 15:27:43