文字列に数字のみが含まれているかどうかを確認します


324

a stringに数字しか含まれていないかどうかを確認したい。私はこれを使いました:

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

if (isANumber){
    ..
}

しかし、それも可能にすることを実現+して-。基本的に、input数字だけが含まれ、他の文字が含まれていないことを確認します。以来+100-5両方の番号があり、isNaN()行くための正しい方法ではありません。おそらく、正規表現は私が必要とするものですか?任意のヒント?

回答:


645

いかがですか

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

1
これは素晴らしい!私は、\ dが10進数の数字を参照していないことに興味がありますか?
dewwwald 2015年

5
@dewwwald:一部の言語では実装方法が異なりますが、JavaScriptでは\dまったく同じ[0-9]です。
Ry-

ここで は、Regular Expressions作業方法に関するドキュメントを見つけることができます
Danfoa

6
/^\d*$/ 代わりに数字のみを含む空の文字列見つかった場合。
КонстантинВан

@DrorBar私は英語が下手で申し訳ありません。言い換えると、「空の文字列が数字のみであると考える場合」です。
КонстантинВан


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

2
組み込みオブジェクトのプロトタイプを変更することはJavascriptでは悪い習慣だと考えられています(驚きの原則、および将来のECMAバージョンでの潜在的な競合)- isNumber = () => /^\d+$/.test(this);代わりに検討し、次のように使用してくださいconsole.log(isNumber("123123));
Nick Bull

2
FWIW、2009年にこの回答が投稿されたとき、それはまだ悪い習慣とは見なされていませんでした。当時存在していたいくつかのjQuery競合他社は、jQueryが勝つ前に、すべてプロトタイプ拡張を実践しました。
balupton

14

float値(ドット区切り値)もサポートする場合は、次の式を使用できます。

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

ただし、floatではなくintを使用しない場合、「?」を使用してfalseを返す可能性があります。「。\」がそれを解決した後。私はこれを/^\d+[\.,\,]?\d+$/.test(value)してコンマと小数点の両方を許可することをお勧めします(後でおそらくコンマをポイントに変換できます)
Lucke

@ラッキー、あなたが提案した正規表現は、10進数または9以上の数値のみを検索できます。最初の数値をに変更する\d+\d*?、0〜9と一致し、.333などの数値も一致します
Gust vanウォルマート・デ・

5
閉じる:var isNumber = /^\d*\.?\d+$/.test(value)-「3.5」、「。5」、「3」に一致します-「3」に一致しません
Peter Hollingsworth、

7

文字列に数字しか含まれていないかどうかを確認する、読みやすく興味深い方法を次に示します。

このメソッドは、spread演算子を使用して文字列を配列に分割することで機能し、every()メソッドを使用して、配列内のすべての要素(文字)が数字の文字列に含まれているかどうかをテストします'0123456789'

const digits_only = string => [...string].every(c => '0123456789'.includes(c));

console.log(digits_only('123')); // true
console.log(digits_only('+123')); // false
console.log(digits_only('-123')); // false
console.log(digits_only('123.')); // false
console.log(digits_only('.123')); // false
console.log(digits_only('123.0')); // false
console.log(digits_only('0.123')); // false
console.log(digits_only('Hello, world!')); // false


1
これはtrue、空の文字列''、および空の配列[]、整数の配列も返します[1, 2, 3](10未満の場合)。それは/^\d+$/私が考える基本的な正規表現よりもバグ/誤用の傾向があります
Drenai


5

正規表現を使用しない解決策は次のとおりです。

function onlyDigits(s) {
  for (let i = s.length - 1; i >= 0; i--) {
    const d = s.charCodeAt(i);
    if (d < 48 || d > 57) return false
  }
  return true
}

ここで、48と57は、それぞれ「0」と「9」の文字コードです。




1

float値を含める場合は、次のコードも使用できます

theValue=$('#balanceinput').val();
var isnum1 = /^\d*\.?\d+$/.test(theValue);
var isnum2 =  /^\d*\.?\d+$/.test(theValue.split("").reverse().join(""));
alert(isnum1+' '+isnum2);

これは、数字と「。」で区切られた数字のみをテストします。最初のテストは0.1や0などの値をカバーしますが、0.1も0も許可しません。したがって、私が提案する解決策はtheValueを逆にすることです。

例:

 theValue=3.4; //isnum1=true , isnum2=true 
theValue=.4; //isnum1=true , isnum2=false 
theValue=3.; //isnum1=flase , isnum2=true 

-1
c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

文字列に数字のみが含まれる場合、nullを返します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.