2011-09-19 62 views
2

我的web應用程序中有一個字段,用戶需要輸入一個或多個以一個或多個句點分隔的數字。這個正則表達式與我認爲不應該匹配的東西

下面是一個什麼樣的用戶可以輸入一個典型的例子:

589327498321.43243214.32421423。

我已經寫了下面的JavaScript代碼來測試值:

var uid = $(this).val(); 
var uidRegex = /(^\d|\.$)+/; 
var isValid = uidRegex.test(uid); 

我得到錯誤的結果。看起來這段代碼告訴我,如果用戶的條目從數字或句點開始,則該條目有效。我該如何解決這個問題,以便整個條目必須只包含數字和句點纔有效?

+0

因此,開始機智h是一個數字,允許在第一個字符後面顯示句號和數字,不允許空字符串,對不對? –

回答

3

這聽起來像你要找的是

號碼後跟任意數量的點+個數的模式序列

如果是的話請嘗試以下/^(\d)+(\d|\.\d)+$/

編輯

OP在註釋中指出連續點是合法的。下面是更新後的正則表達式如果你想禁止一個時期之初,以說明以及/^(\d)+(\d|\.)+$/

+0

+1:這適用於我。我認爲問題在於我將字符串標記的開始和結束嵌套在括號內。謝謝。 –

+0

@Rice這真的有用嗎?在那種情況下,從例子「1423」開始的最後一段時間。實際上只是結束標點符號而不是用戶輸入的一部分? –

+0

@Buh,這就是我解釋問題的方式。 – JaredPar

0
/^(\d|\.)+$/ 

應該這樣做=]

+1

這將匹配「abc123」。您需要強制執行字符串的開頭和結尾。 –

+0

哎呀!固定=] –

0
var uidRegex = /[^\d.]/; 
var isValid = ! uidRegex.test(uid); 

http://jsfiddle.net/uKm7F/


字符串,請使用:

var uidRegex = /(?:[^\d.]|^\.)/; 
var isValid = ! uidRegex.test(uid); 

http://jsfiddle.net/uKm7F/6/

+0

這將匹配「abc123」。您需要強制執行字符串的開頭和結尾。 –

+0

@Jonathan M - 你不可能犯的錯誤:http://jsfiddle.net/uKm7F/1/ –

+0

不要低估我的錯誤能力... –

0

您也可以考慮:

var uidRegex = /^\d+(\d|\.)+$/; 
+0

這允許輸入字符串以「。」開頭,根據問題 – JaredPar

+0

@JaredPar看起來是非法的:良好的調用。我會糾正的。 –

0

這個怎麼樣模式:/^\d+(\.+\d+)*$/

0
/^\d[\d\.]*$/ 
^ ^--any number of digits or periods 
    |-start with a digit 
0

如果需要的字段(並且必須包含至少2個字符),這將這樣做:

 
/^(\d)+(\d|\.)*(\d)+$/ 
相關問題