2011-07-18 65 views
0
var snumber1 = "123456789"; 
var scharacter2 = "abcdefgh"; 

有兩個字符串。我如何確保snumber1只包含數字? 什麼正則表達式?我如何區分數字字符串和字符串?

+0

一個正則表達式在這裏並不是真的需要,但如果你很好奇,它將是'/^\ d + $ /'只有數字,或者'/^\ d * $ /'如果你想匹配空字符串也。 –

回答

2
var snumber1 = "123456789"; 
//built-in function 
alert (!isNaN (snumber1)); 
//regexp 
alert (/^[0-9]+$/.test (snumber1)); 
//another regexp 
alert (/^\d+$/.test (snumber1)); 
//convert to Number object 
alert (parseFloat (snumber1) === Number (snumber1)); 
+0

'/ [0-9] /'將匹配任何至少有一位數的字符串。 –

+0

!isNaN和isNaN有什麼區別? CanNaN就夠了嗎? – DrStrangeLove

+0

是的,只是要求查看isNaN()是否爲false。 –

0

你可以使用parseInt

if (parseInt(snumber1) == snumber1){ alert('is a number'); } 
+0

這不適用於「012」。 – Jiri

2

的正則表達式來確定,如果事情是隻是數字是這樣的:

"^\d+$" or "^[0-9]+$" 

來源:StackOverFlow 273141

1

正則表達式是不必要的:

var snumber1 = "123456789", 
    scharacter2 = "abcdefgh"; 

if (isNaN(+snumber1)) { 
    alert('snumber is not a number!'); 
} 

if (!isNaN(+scharacter2)) { 
    alert('scharacter2 is not a string!'); 
} 

請注意,我用的是+運營商做的強制類型轉換。這樣做總是會導致一個數字或NaN。如果使用parseIntparseFloat函數,則可以從parseInt('010abc', 10)獲得「10」。這顯然沒有通過你的測試「只有數字」(*)

+0

更好的是,考慮到isNaN有邊緣情況,使用'if(+ sNumber1!= + sNumber1)',如果sNumber1不是數字,則爲真。 –

+0

@Thaddee:'+ sNumber!= + sNumber'與* isNaN *具有*完全相同的邊緣情況,另外一個缺點是它比'isNaN'慢 - 不管信不信,'isNaN'表現相同在檢查它之前傳遞的參數上的數字轉換。這也意味着'isNaN(+ str)'中的'+'是完全不必要的,只是增加了額外的開銷而沒有任何好處。 –

+1

@Andy E,我沒有意識到這一點。謝謝。 –

1

您應該使用SWITCH而不是IF

var valueA=100 

switch(/^[0-9]+$/.test(valueA)) 
{ 
    case false: 
     alert ("'" + valueA + "'" + " Is NOT a number.Try Again"); 
     break; 
    case true; 
     alert ("you've got numbers") 
     break; 
} 

這將返回true

相關問題