JavaScriptの文字列からすべての非数値文字を取り除きます


701

JavaScript / ECMAScriptを使用して文字列からすべての非数値文字を削除したい非DOMシナリオを考えてみましょう。範囲内の文字はすべて0 - 9保持する必要があります。

var myString = 'abc123.8<blah>';

//desired output is 1238

プレーンなJavaScriptでこれをどのように実現しますか?これは非DOMシナリオであることを覚えておいてください。したがって、jQueryやブラウザーおよびキープレスイベントを含むその他のソリューションは適切ではありません。

回答:


1431

文字列の.replaceメソッドをの正規表現とともに使用します\D。これは、数字以外のすべてに一致する省略文字クラスです。

myString = myString.replace(/\D/g,'');

5
ありがとうcsj; どこでも詳細情報を見つけるには\D
p.campbell 2009

34
これが私のデフォルトの正規表現リファレンスです:regular-expressions.info/reference.html 組み込みの文字クラスにはそれぞれ組み込みの補完があります。\ d \ D(数字と数字以外のすべて)\ w \ W(単語文字と単語文字以外のすべて)\ s \ S(空白と空白以外のすべて)
csj

3
ただ、明確にするために、ここに置き換えるための構文は次のとおりです。w3schools.com/jsref/jsref_obj_regexp.aspスラッシュと「g」はそのコマンドの一部ではなく、正規表現の一部であるため。
Mike K

ないreplaceすべてのブラウザでこの正確な構文で仕事を?object has no method 'replace' 私がjQueryでつかんだテキストでこれを使用すると、古いバージョンのIEでを取得したことを覚えているようです...またはそのようなもの
cwd 2013

@cwd過去または現在のブラウザで何がサポートされているのかわかりません。質問は非DOMコンテキストを指定しているため、投稿者が非Webブラウザー環境でスクリプトを作成していた可能性があります。
csj 2013

354

浮動小数点数のドットを残すためにこれが必要な場合は、これを使用します

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"

6
正規表現の専門家はいますか?これを1つのドットのみ許可する方法(数値と非常に関連性が高い)。ありがとう!
Kasperi 2014年

1
どういう意味ですか?入力と出力の例を示します
max4ever

2
よくない:"aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.数を囲むかもしれない任意の文字列を削除すべき...
VSYNC

2
@ max4ever -(負の)数値のケースを処理してくれてありがとう:)
Pankaj Parkar 2017年

4
@Kasperi多分:parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
A. Genedy


23

正規表現を使用して、数字以外のすべての文字を置き換えることができます。

var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238

22

以下に沿ったもの:

yourString = yourString.replace ( /[^0-9]/g, '' );

10
元の質問に対する正確な回答ではなく、小数点を処理するバージョン:yourString = yourString.replace ( /[^0-9.]/g, '' );
Maxim Mai


0

Angular / Ionic / VueJS-私は次の簡単な方法を思いつきました:

stripNaN(txt: any) {
    return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}

ビューでの使用:

<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>

0

残念ながら、上記の答えはどれもうまくいきませんでした。

$123,232,122.11(1232332122.11)やUSD 123,122.892(123122.892)のような文字列から通貨番号を変換したり、₹ 98,79,112.50、10進数のポインターを含む数値出力を取得しようとしていました。

次のような自分の正規表現を作成する必要がありました:

str = str.match(/\d|\./g).join('');

0

すべての非数値文字を削除し、小数点を保持する(そして数値を返す)短い関数:

parseNum = str => +str.replace(/[^.\d]/g, '');
let str = 'a1b2c.d3e';
console.log(parseNum(str));


-5

私たちは2017年にいます。ES2016も使用できます

var a = 'abc123.8<blah>';
console.log([...a].filter( e => isFinite(e)).join(''));

または

console.log([...'abc123.8<blah>'].filter( e => isFinite(e)).join(''));  

結果は

1238

12
これは、この操作を実行するための非常に非効率的な方法です。
djheru

ここで非効率的または悪いことは何ですか?
Vladislav Kostenko

5
スペアメソッドを介して文字列を単一文字の文字列の配列に変換し、JavaScriptに対して各配列項目にフィルター関数を適用して新しい文字列配列を返し、最終的にその配列を文字列に結合します。Regexは文字列を取り、文字列を返し、処理はネイティブコードを介して行われます。
ShortFuse 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.