4

私はこれを使用しています:

str2 = str1.replace(/[^\w]/gi, '');

正常に動作しますが、ここここinsecure '^'の投稿で概説されているように、JSLint に違反します。

何を許可しないかではなく、何regex許可するかを指定するために your を使用する方がよいというのがコンセンサスです。ただし、これを行う方法を示す人は誰もいません。フラナガンとクロックフォードも目の前にいますが、残念ながらまだどうすればよいかわかりません。

では、ネガティブ テストではなくポジティブ テストで見つかっstr2た文字のみを許可するように設定するにはどうすればよいでしょうか。\wstr1

4

3 に答える 3

2

\W(大文字の W)で試してください。

は単語を選択し、 は単語\w\W選択しません。そして少し表情が良くなりました。

これはRegEx チートシートです。コーディング中に便利です!

于 2012-06-30T04:54:13.383 に答える
1

あなたの例は単純すぎて^、正規表現で使用しないという点を示すことができません。

より良い例としては、HTML タグを許可したいが、人々に XSS (クロスサイト スクリプティング) 攻撃を挿入させたくない、フォーム送信での HTML コードのクリーンアップがあります。この場合、ブラックリスト アプローチを使用すると、すべての攻撃コードを確実に削除することはできません。これは、攻撃者が構文を変更してフィルターを回避したり、フィルター処理されたコードが攻撃コードを返すようにコードを適合させたりできるためです。正しいアプローチは、ホワイトリストを使用して、許可されているすべてのタグと許可されている属性をリストすることです。この例は、正規表現とは関係がない可能性があります。正規表現は HTML の解析に使用すべきではないためですが、フィルタリングにおけるホワイト リストとブラック リストのアプローチについてのポイントを示しています。

于 2012-06-30T04:51:48.600 に答える
0

それはあなたが何をしたいかによります。

\w次のようにして、文字セットのみを許可し、文字列に \w 文字セット以外の文字が含まれている場合にエラーをスローすることができます。

str1='blah blah string';
if(str1.match(/^\w*$/gi)
{
    //do something
}
else
{
    //alert and/or throw error
}

または、str1 として定義されているものをすべて受け入れて、不要な文字を除外することもできます。それはあなたが現在していることです。例:

str1='blah blah some string';
str1=str1.replace(/\W/gi,'');

注:上記は、あなたがしていることの短いバージョンです。str2 = str1.replace(/[^\w]/gi, '');

于 2012-06-30T05:05:19.123 に答える