2015-12-01 101 views
1

試圖寫一個JavaScript正則表達式強制用戶在整數後輸入小數點,似乎並不像許多人想這樣做,因爲我的搜索沒有得到任何適合我的東西需要。整數和十進制數字(金錢)的JavaScript正則表達式

Match: 2.00 20.00 200.00 1.73 0.10

No Match: .2 .20 . 1 10 1.0 0.1 1.

這是我目前有:

var regexp=/^[0-9]{1,}\.{1}[0-9]{2}$/;

在純英文,用戶必須在X.XX格式輸入資金。只有整數本身是不允許的。

我非常感謝任何幫助,並且在任何人都必須提供這方面的工作。

編輯:

這裏是代碼:

var notempty=/[a-zA-Z0-9\.\$]/g; 
var money=/^[0-9]{1,}\.{1}[0-9]{2}$/; 

if ((notempty.test(document.getElementById('numbers').value)) && (!money.test(document.getElementById('numbers').value))) 
{alert('Wrong format');} 
+4

'/^\ d + \。\ d {2} $ /'怎麼樣? - http://regexr.com/3cak4 –

+0

@JoshCrozier只要注意,這也將允許'0003.01'這可能不是OP想要的。 –

+0

這就是我已經擁有的同樣的東西,只是寫法不同而已,不,它不起作用。 「1」返回true,但「10」不返回true。爲了匹配,需要將「1」寫爲「1.00」。 – Bob

回答

3

您最初的正則表達式是正確的,問題是你的實際支票notempty可以短路如果該值false的條件。例如,如果您的字符不是字母,數字,美元符號或句點/[a-zA-Z0-9\.\$]/,它將評估false並忽略&&之後的項目,因爲值不重要,因爲false && [any conditions] = false。例如,如果輸入值是"+"

if (false && ...) 
    // invalid format [the expression was false, so this isn't ran] 

由於第一條件是false整個表達式爲假,從而導致不適當的"correct format"。不需要在這種情況下,「空檢查」無論如何,你可以簡單地有:

if (money.test(document.getElementById('numbers').value) { 
    // valid format 
} else { 
    // invalid format 
} 

正如@JostCrozier指出,你的表情可以簡化爲:/^\d+\.\d{2}$/,它在功能上等同。