2013-10-11 86 views
-1

我需要檢查並確保變量僅包含數字0-9或句點或逗號。其他任何事情都應該被拒絕。使用.matches時出現Javascript錯誤

我已經建立了一個簡單的if語句中,我認爲會工作的功能,但它不是:

function numCheck(source) { 
    if (!(source.matches("[0-9.,]*"))) { 
    alert('Number'); 
    } 
    else { 
    alert('Not a number'); 
    } 
} 

什麼也沒有發生。我可以在沒有if語句的情況下調用該函數,它可以工作,但不知何故,我只是沒有正確地執行語法。

+1

你的意思是說',,,,,'或',,,, ....'等應該被認爲是一個數字嗎? – Jerry

回答

1

你不使用正則表達式分隔符和行開始/結束錨點。

它應該是:

source.match(/^[0-9.,]*$/) 
+0

儘管不推薦,你可以將一個字符串作爲正則表達式傳遞給match(),並將其隱式轉換爲正則表達式對象。 – alex

+1

感謝您的好評/幫助。這就是我一直在尋找的東西。如果從其他地方剪切並粘貼,則不會意識到「匹配」是不正確的。知道正確的正則表達式也很棒!謝謝大家! – user1149499

+0

不客氣,很高興它解決了。 – anubhava

3

matches()是不是在標準庫的方法,但是,match()是。

事實上,你可能會更好使用像這樣關...

var looksLikeANumber = /^[\d.,]+$/.test(source); 

我以前test(),因爲你並不需要的match()的權力,這將返回拍攝組等,這方式,你也可以免費將source轉換爲一個字符串(如果一個數字被傳入,你會遇到麻煩,因爲match()不在Number.prototype)。

0

嘗試這樣

var match = /^[0-9.,]*$/.exec(this.value); // value to be matched 
    if (!match) { 
     alert('invalid'); 
    } 
0

我會走得更遠一點與此正則表達式,並使用.test

var result = /^\d*[\d,.]\d*$/.test(string); 

要確保至少有一個號碼(可以接受更多)和只有1個週期或1個點。