2009-11-22 4 views
159

Я хочу проверить, содержит ли строка только цифры. Я использовал это:Проверьте, содержит ли строка только цифры

var isANumber = isNaN(theValue) === false; 

if (isANumber){ 
    .. 
} 

.. но понял, что он также позволяет + и -. В основном я хочу убедиться, что вход содержит ТОЛЬКО цифры и никаких других букв. Так как +100 и -5 оба числа, isNaN, это не правильный путь. Возможно, регулярное выражение - это то, что мне нужно? Какие-нибудь советы?

ответ

348

как о

var isnum = /^\d+$/.test(val); 
+4

Посмотрите на этот пост ... http://stackoverflow.com/questions/18082/validate -numbers-in-javascript-isnumeric – Jorge

+10

Вы должны использовать [0-9] вместо \ d, чтобы быть более понятным. \ d предназначено для соответствия любому типу цифр, в том числе и от других языков, хотя я считаю, что JavaScript является исключением, где \ d всего 0-9. – mukunda

+0

Это замечательно! Мне любопытно, что \ d не относится к десятичной цифре? – dewwwald

2

Ну, вы можете использовать следующее регулярное выражение:

^\d+$ 
9
String.prototype.isNumber = function(){return /^\d+$/.test(this);} 
console.log("123123".isNumber()); // outputs true 
console.log("+12".isNumber()); // outputs false 
4

Это то, что вы хотите

function isANumber(str){ 
    return !/\D/.test(str); 
} 
4

Если вы хотите, чтобы даже поддержку значений с плавающей точкой (точка значения, разделенные), то вы можете использовать это выражение:

var isNumber = /^\d+\.\d+$/.test(value); 
+0

однако, если вы не используете float, а int, он вернет false, возможно, используя «?» после ". \" решил это. Я предлагаю это /^\d+[\.,\,]?\d+$/.test(value), чтобы разрешить как запятую, так и точку decimal (позже возможно может преобразовать запятую в точку) – Lucke

+0

@Lucke, регулярное выражение, которое вы предложили, будет только иметь возможность находить числа с десятичной точкой или выше 9. Если вы измените первый '\ d +' на '\ d *?', он сможет сопоставлять 0 - 9, а также цифры, такие как .333 –