2015-01-21 34 views
1

我需要檢查一個字符串是否有效的價格。在某些地區,「。」與「,」互換,分隔符可能在數千或數百。 例如: 有效期:使用正則表達式驗證價格在Javascript中使用

1234 
1,234 
1.234 
1,23,334 
1.23.334 
1,23,334.00 
1.23.334,00 

無效:

1,23...233 
1,,23 
etc 

正則表達式我用的是

/(\d+(?:[\.,](?![\.,])\d+)*)/g 

但是這是給我的「1,23兩場比賽.. .233「我,」1,23「和」233「作爲比賽,我不想爲此返回任何比賽。 Here是我一直在努力的正則表達式。我真正想要做的,只要有「。」。或「,」下一個字符不應該是「。」或「,」它應該是一個數字。

+0

在我看來,'/ \ \ |!。,, /測試(串)'應該做的工作。如果你還想檢查其他東西是否是數字,那麼:'!/ \。\。| ,, | \ D/.test(string)'。如果找到任何模式,則表達式返回false,否則返回true。 – RobG 2015-01-21 07:07:21

+0

你應該在這裏使用插件而不是正則表達式。 – 2015-01-21 07:20:24

+0

@anubhava,這似乎很好,檢查。如果我們需要從中選擇價格,我們假設「123,456.00 USD」 – saiki4116 2015-01-21 07:29:16

回答

1

您可以簡單地做到這一點。

^\d+(?:[.,]\d+)*$ 

試試看。

https://regex101.com/r/tX2bH4/61

var re = /^\d+(?:[.,]\d+)*$/gm; 
var str = '1234\n1,234\n1.234\n1,23,334\n1.23.334\n1,23,334.00\n1.23.334,00\n1,23...233\n1,23.'; 
var m; 

while ((m = re.exec(str)) != null) { 
if (m.index === re.lastIndex) { 
re.lastIndex++; 
} 
// View your result using the m-variable. 
// eg m[0] etc. 
} 
+0

錯誤匹配0.12.3 – rahmanisback 2017-08-31 14:43:29

+0

@rahmanisback可以很容易地修復(?!0 [。,]) – vks 2017-08-31 14:46:32

2

好像你想是這樣的,

^\d+(?:\.\d+)?(?:,\d+(?:\.\d+)?)*$ 

DEMO

OR

^(?!.*(,,|,\.|\.,|\.\.))[\d.,]+$ 

在開始負先行斷言,刺不包含連續的逗號或點點和逗號。

DEMO