7

次のように、文字列からすべての特殊文字を削除する最良の方法は何ですか?

!@#$%^&*(){}|:"?><,./;'[]\=-

これらの文字が削除されたアイテムはかなり短いので、それぞれに REGEX を使用するか、単に文字列操作を使用する方がよいでしょうか?

どうも

環境 == C#/.NET

4

9 に答える 9

6

通常、ブラックリストよりもホワイトリストを作成する方が適切です。

正規表現には、事実上、英数字とアンダースコアを意味する便利\wな機能があります (リストにアクセント付き文字 (á、é、ô など) を追加するバリアントもあれば、そうでないバリアントもあります)。

\W英数字以外のすべてを意味するように使用することで、これを逆にすることができます。

したがって、空の文字列に置き換える\Wと、すべての「特殊」文字が削除されます。


または、英数字とは異なる文字セットが必要な場合は、否定文字クラスを使用できます。 は[^abc]、またはa以外のすべてに一致し、範囲外のすべてに一致します。bc[^a-z]a,b,c,d...x,y,z

is と同等で\wあり[A-Za-z0-9_]、したがって\Wis[^A-Za-z0-9_]

于 2009-02-09T14:53:58.850 に答える
3

PHPで:

$tests = array(
     'hello, world!'
    ,'this is a test'
    ,'and so is this'
    ,'another test with /slashes/ & (parenthesis)'
    ,'l3375p34k stinks'
);

function strip_non_alphanumerics( $subject )
{
    return preg_replace( '/[^a-z0-9]/i', '', $subject );
}

foreach( $tests as $test )
{
    printf( "%s\n", strip_non_alphanumerics( $test ) );
}

出力は次のようになります。

helloworld
thisisatest
andsoisthis
anothertestwithslashesparenthesis
l3375p34kstinks
于 2009-02-09T14:59:02.253 に答える
2

構文が読みやすく維持しやすいので、私は正規表現を好みます。

# in Python
import re
re.sub("[abcdef]", "", text)

abcdef削除する適切にエスケープされた文字はどこにありますか。

あるいは、英数字 (およびアンダースコア) のみが必要な場合は、次を使用できます。

re.sub("\W", "", text)

ここで、単語以外の文字、つまり\Wを表します。[^a-zA-Z_0-9]

于 2009-02-09T14:56:21.167 に答える
1

英数字のみが必要な場合は、反転文字クラスを使用してこれを表現できます。

[^A-Za-z0-9]+

これは、英数字以外のすべての文字を意味します。

于 2009-02-09T14:56:42.837 に答える
1

ここに簡単な正規表現があります

[^\w]

これは、単語以外のすべての文字をキャッチする必要があります。これにより、az AZ 0-9 のスペースが許可され、スペースも _ もリストに含まれていないため、これらもキャッチしたい場合は、次のようにします。

/[a-z0-90/i

これは az と 0-9 の PHP 形式で、i は大文字と小文字を区別しません。

于 2009-02-09T15:04:42.257 に答える
0

キー入力された文字の askey 値を取得することで、フロントエンドでそれらを検証できます。

于 2009-02-09T16:50:08.710 に答える
0

PHPでの理想的なアプローチは...

$text = "ABCDEF...Á123";
$text = preg_replace( '/[^\p{L}]/i', '', $text);
print($text); # Output: ABCDEFÁ

または、Perlで...

my $text = "ABCDEF...Á123";
$text =~ s/[^\p{L}]//gi;
print($text); # Output: ABCDEFÁ

[^a-zA-Z] で単純に一致させると、アクセント付きの文字がすべて失われますが、(ほとんどの場合) 保持する必要があると思います。

于 2016-05-05T16:41:34.550 に答える
0

どの言語で正規表現を使用していますか?

たとえば、Perl では、リスト内の文字を何も変換しない変換を行うことができます。

例: これは 'a'、'b'、'c' または 'd' を '' に変換します。

$sentence =~ tr/abcd//;
于 2009-02-09T14:56:08.080 に答える
0

「tr」コマンドを使用しますか?

あなたがいる環境を言わないでください...シェル?Cプログラム?ジャワ?それらのそれぞれには、異なる最適なソリューションがあります。

于 2009-02-09T14:53:05.607 に答える