2017-10-04 236 views
0

我需要錢模板,如:錢正則表達式模板

999 999 999,5 
999 999 999 
20 500,8 
20 500 

我用https://regex101.com/創造^\d{1,3}(\d{3})+(,?\d{1})?$。我認爲這是正確的,因爲我的刺痛是匹配的,但是當我嘗試實現它

var str = "20 000,5" 
console.log(str.match("^\d{1,3}(\d{3})+(,?\d{1})?$")); 

我有null

我做錯了什麼?

+0

逃離\字符,或使用正則表達式的符號:'的console.log(str.match(/^\ d {1,3}(\ d {3})+(,\ d {1}? )?$ /));' –

+0

'^ \ d {1,3}(?: \ d {3})*(?:,\ d)?$'稍短。不知道你是否打算確保第二組總是在那裏,但是我把'+'改成了'*'。我還將分組更改爲非捕獲組。同樣'{1}'是多餘的 – ctwheels

回答

5

你必須避開反斜線。

str.match("^\\d{1,3}(\\d{3})+(,?\\d{1})?$"); 

編輯:更改正則表達式模式,以便它可以在下面1 000匹配的數字。

我也刪除了?,,因爲它看起來很奇怪嗎?

str.match("^\\d{1,3}(\\d{3})*(,\\d)?$"); 
+0

我也會改變它,所以它可以用於低於'1 000'的數字:'(\ d {1,3})*(\ s \ d {3})+ ?\ d {1,2})?' – Alfabravo

+0

@Alfabravo當然,我會編輯我的回答 – pciang

+1

@Alfabravo可能不是預期的用途,但你的正則表達式不能解決這個問題。在'500,5'上試試你的正則表達式。如果你想低於'1 000',你需要將'+'改成'*' – ctwheels