0

私は sth を間違っていますか、それとも JS replace に問題がありますか?

<input type="text" id="a" value="(55) 55-55-55" />​

document.write($("#a").val().replace(/()-/g,''));​

prints (55) 555555

http://jsfiddle.net/Yb2yV/

() とスペースも置き換えるにはどうすればよいですか?

4

7 に答える 7

5

JavaScript の正規表現では、文字()文字は特別な意味を持ちます。文字どおりにリストしたい場合は\、それらの前にバックスラッシュ ( ) を付けます。

()、 、およびスペース文字をすべて取り除くことが目標の場合は-、文字クラスを代替 (たとえば、どちらか-または) on と組み合わせて使用​​できます\s。これは、「ホワイト スペース」を表します

document.write($("#a").val().replace(/[()\-]|\s/g,''));​

()(文字クラス内では必要がないため、 の前にバックスラッシュを付けませんでした。文字クラス-内で-は特別な意味があるため、 の前にバックスラッシュを付けました。)

あるいは、数字以外のものを取り除きたい場合は、次のように使用できます\D

document.write($("#a").val().replace(/\D/g,''));​

\Dは「数字ではない」ことを意味します (これは大文字であることに注意してください\d。小文字は反対の [任意の数字] です)。

正規表現に関する MDN ページの詳細情報。

于 2012-06-05T14:58:13.927 に答える
3

文字クラスを使用する必要があります

/[-() ]/

"-"ダッシュは通常範囲に使用されるため、最初の文字として使用するとあいまいさが解決されます (例: ) [a-zA-Z0-9]

于 2012-06-05T14:58:11.650 に答える
0
document.write($("#a").val().replace(/[\s()-]/g,''));​

これにより、すべての空白 (\s)、括弧、およびダッシュが削除されます

于 2012-06-05T14:58:28.457 に答える
0

角かっこは、正規表現のキャプチャ グループを示します。/\(\)-/シーケンス「()-」に一致させるには、それらをエスケープする必要があります ( )。それでも、文字クラス、つまり「(」、「)」または「-」に一致する式を使用したいと思います。空白の場合は\s省略形を含めます:

value.replace(/[()-\s]/g, "");

ドキュメントチュートリアルを読みたいと思うかもしれません。

于 2012-06-05T14:59:45.350 に答える
0

これを使って

.replace(/\(|\)|-| /g,'')

括弧をエスケープする必要があります (つまり、\(の代わりに()。\(正規表現では、 、\)、 '-' 、および(スペース)の 4 つの項目をリストする必要があり、4 つの文字列だけでなく、それらのいずれかを置き換えたい場合は、それらの間で OR を使用する必要があります。|

于 2012-06-05T15:00:14.083 に答える
0

セット内の任意の文字に一致させたいので、角かっこを使用して文字セットを作成する必要があります。

document.write($("#a").val().replace(/[()\- ]/g,''));

通常、括弧は正規表現では特別な意味を持つため、正規表現では無視され、ダッシュだけが残ります。通常、リテラルの括弧を取得するには、エスケープする必要があります\(ただし、上記のように角括弧ブロックではエスケープしません)。

上記のダッシュは、通常、文字セットの範囲を示しているため、エスケープされています (例: [a-z].

于 2012-06-05T15:01:02.133 に答える
0

非常に悪いかもしれませんが、非常に基本的なアプローチは、

document.write($("#a").val().replace(/(\()|(\))|-| |/g,''));​​

|を意味ORし、 \予約済みシンボルをエスケープするために使用されます

于 2012-06-05T15:06:39.463 に答える