2017-10-04 67 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