1

私のアプリケーションでは、クライアントはMSWordからTextareaにデータをアップロードしています。私の正規表現スキルはあまり良くありません:)

文字列からすべてのジャンク文字をフィルタリングするために正規表現が必要です。受け入れ可能な入力はキーボードからの文字のみです。つまり、AZ、az、0-9、およびキーボードに存在するすべての特殊文字+すべての通貨記号。

編集:拡張を含むASCIIコードのみを許可したい。http://www.asciitable.com/

4

1 に答える 1

6

ASCIIテーブルを確認しましたが、そこに含まれるすべての印刷可能な記号は、標準のキーボードに存在します。

「キーボードに存在する特殊文字」の定義を理解するのは難しいですが、印刷可能な英数字以外の文字を意味していると思います。すべてのユニコード空白文字(非ブレーキスペース、ゼロ幅ワード非ジョイナー...)は確かに「特別」ですが、ほとんどのキーボードにはありません。バックスペース文字は、ほとんどのキーボードに存在しますが、通常はOSによって解釈されるため、これは望ましくないと思います。同様の引数がタブキーにも当てはまります。タブ文字は改行文字よりも取得が簡単ですが、通常はフォーム入力に入力することはできません。

通貨記号に関しては、文字クラス\p{Sc}がそれらをカバーしており、C#正規表現はこのクラスをサポートしているようです

米国以外のキーボードには、さらに多くの文字(発音区別符号、キリル文字、中国語/日本語/韓国語の文字を含む記号)が含まれていますが、「AZ、az、0-9、およびキーボードに存在するすべての特殊文字+すべて」の説明と一致しません。通貨記号」。特に興味深いのは、日本語の文末句読点です。これは、単なるドットではなく、中空の円です。しかし、それはあなたの説明と一致しますが、あなたもそれを望まないと思います。

C#もサポートし\p{isBasicLatin}ていますが、これにはASCII制御文字が含まれています。これは不要だと思います。

要約すると、説明は印刷可能なASCII範囲全体と改行に一致します\n。文字列がこれらから作成されていることを確認するには、次の正規表現を使用します。

^[\x20-\x7E\n\p{Sc}]$

編集内容を反映して、すべての印刷可能なASCII文字(ほとんどの通貨記号は存在しない、存在し$ない)+改行も考慮してください

^[\x20-\x7E\n]$

または、制御文字とすべてのASCII空白を含むASCII範囲全体:

^[\x00-\x7F]$
^[\p{isBasicLatin}]$

参照:
MSDN文字クラス
MSDN文字エスケープ
MSDNコード例(ここで採用):

bool IsValid(string strIn)
{
    // Return true if strIn is in valid format.
    return Regex.IsMatch(strIn, @"^[\x20-\x7E\n\p{Sc}]$");

}

正規表現置換(ここで適応;ストリップアウトeverything except A-Z, a-z , 0-9 and following characters. ~ ` ! @ # $ % ^ & * ( ) _ + | - = \ { } [ ] : " ; ' < > ? , . /

String CleanInput(string strIn)
{
    // Replace invalid characters with empty strings.
    return Regex.Replace(strIn,
          @"[^a-zA-Z0-9`!@#$%^&*()_+|\-=\\{}\[\]:"";'<>?,./]", ""); 
}

逐語的な文字列リテラル内の二重引用符について:http://blogs.msdn.com/b/gusperez/archive/2005/08/10/450257.aspx

于 2013-02-04T07:28:44.660 に答える