2011-12-22 22 views
-1

文字列を持ち、数字以外の数字を二重引用符で囲みたい(まだそれらがない場合)。正規表現で非数を検出する最良の方法は何ですか?数字以外の文字列を指定する正規表現

これらは数字です:123.43、13827。これらは非数字です:こんにちは、2011-02-45、20a、A23。

私は現在持っている正規表現ですが、数字以外の数字が桁で始まる場合は処理しません(したがって、2011-02-45は選択されません)。撮影

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

Validate decimal numbers in JavaScript - IsNumeric()

+0

'Hello、2011-02-45、20a、A23. 'という入力があると、出力は' Hello、2011-02-45,20 "a"、 "A" 23.となるでしょう。あるいは私は誤解していますか?また、それが正しい場合、 'Hello、2011-02-45、20abc、A23.'でどうなるべきでしょうか?おそらく 'こんにちは、2011年2月45日、20日" abc "、" A "23. –

+0

与えられた:'今日は2011年12月22日2011年3日です '。あなたはこれを得るでしょう:「今日」は「2011年」の「2011-12-22」「第3の」「日」です。したがって、数字だけは二重引用符で囲まれません。 –

答えて

3

str = +str||false; 

列str = 123.4たり、虚偽ではない。これは実数に "STR" を型キャストたりすることができます文字列としてそれを残している番号

..

str = +str||str||false; 

へ次のステップに進むと、あなたの出力を確認することができます:

if(typeof(str)=='string'){ 
    //str is a string 
} 
+0

これは正規表現ではありません。私は置換を使用して文字列内の任意の非数をラップしたいと思います。ごめんなさい。 –

+2

@MartinDrapeauあなたは間違っています!このアンサーは非常に便利です! 'if(!isNumber(x)){x = '"' + x + '"';}これはif文で使うことができ、' FALSE'を返すと、 } ' –

+1

@Martin:allessioalexは"正規表現は必要ありません "と言っていて、彼は絶対に正しいです。あなたのコードを不必要に複雑にする(なぜなら、関数呼び出しがすべての*ケースをキャッチしているので)? – Ether

0

あなたは正規表現よりたくさん速くなり、このような何かを、行うことができ、このことについてどのように

​​
1

別の質問を読んで解決策を見つけました。これはそれです: str.replace(/(['"])?([a-zA-Z0-9_\-]*[a-zA-Z_\-]+[a-zA-Z0-9_\-]*)(['"])?/g, '"$2"');

トリックは、マッチに数字がないことを確認することです。

関連する問題