2013-02-13 16 views
8

私たちのアプリケーションでは、ユーザはMSワードからasp.netテキストエリアコントロールへのデータを入力し、最後にデータはSQL Serverに保存されます。何らかの理由で、SQL Server Management Studioから見たときに小さな四角形のように見える迷惑メールはほとんどありません。Regexで置き換えます

これは、Crystal Reportsの生成中にエラーが発生しています。

私は弾丸と共にこのようなすべての文字を削除する正規表現が必要です。有効な入力は

A-Z, a-z , 0-9, ~ ! @ # % $^& * () _ + | ` - = \ {}:">? < [ ] ; ' , ./

です。また、タブスペースは単一のスペースで置き換える必要があります。 Enterキーまたは改行が許可されています。

現在、私は

Regex.Replace(data, @"[^\u0000-\u007F]", " "); 

を使用していますが、それは弾丸またはタブのスペースを削除するために動作しません。

正規表現の忍者はこの問題を解決できますか?前もって感謝します。

+0

私はそれがあなたが何をしているのか正確には分かりませんが、Wordから貼り付けるオプションを与える 'textarea'でWYSIWYGエディタを有効にする方法について知っています。 [TinyMCE](http://www.tinymce.com/wiki.php/Plugin:paste)にはこのタスク用のプラグインがありますか? – Tr1stan

+0

これは今のところ私の選択肢ではありません。 – NoobDeveloper

+0

「ASCII」SQL関数を使用して、文字が正確に何であるかを調べます。間違ったものを探していると思われます。http://msdn.microsoft.com/en-us/library/ms177545.aspx – Arran

答えて

3

2つの正規表現を使用できます。最初に、"\t|<bullet>"<bullet>が箇条書きを表す)パターンが使用され、TABと箇条書きをスペース(" ")に置き換えます。無効な文字を空の文字列("")に置き換える、つまりそれらを取り除くために、有効な文字のリストを含むネゲートされた文字セットのパターンが2番目に使用されます。あなたはCRとLF文字(スペース)を維持する必要があるので、これらは、有効な文字のセットに追加する必要があります。

using System; 
using System.Text.RegularExpressions; 

static class Program 
{ 
    public static void Main() 
    { 
    string pattern1 = @"\t"; 
    Regex regex1 = new Regex(pattern1, RegexOptions.Compiled); 
    string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]"; 
    Regex regex2 = new Regex(pattern2, RegexOptions.Compiled); 

    string input = "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\nárvíztűrő\ttükörfúrógép"; 
    string temp = regex1.Replace(input, " "); 
    string output = regex2.Replace(temp, ""); 
    Console.WriteLine(input); 
    Console.WriteLine(output); 
    Console.ReadKey(true); 
    } 
} 

出力:árvíztűrő後にTABをに変更した

ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./ 
árvíztűrő  tükörfúrógép 
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./ 
rvztr tkrfrgp 

注意単一のスペース。

弾丸について

私はWordで箇条書きリストを作って、Webページでのテキストエリアにそれをコピーします。次に、HTMLを保存し、箇条書きがUTF-8でエンコードされた文字E280A2として保存されていることを確認しました。これは私が「弾丸の表現」の上で呼んだものです。あなたは、可能な箇条書き文字のバイナリ表現を把握し、第1パターンにそれらを追加する必要がありますいずれか、またはそれらTAB文字に、または文字セットにそれらのすべてを置く:

using System; 
using System.Text; 
using System.Text.RegularExpressions; 

static class Program 
{ 
    public static void Main() 
    { 
    byte[] bulletBytes = new byte[] { 0xE2, 0x80, 0xA2 }; 
    string bullet= Encoding.UTF8.GetString(bulletBytes); 

    string pattern1 = @"[\t" + bullet + "]"; 
    Regex regex1 = new Regex(pattern1, RegexOptions.Compiled); 
    string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]"; 
    Regex regex2 = new Regex(pattern2, RegexOptions.Compiled); 

    string input = 
     bullet + "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\n" + 
     bullet + "árvíztűrő\ttükörfúrógép"; 
    string temp = regex1.Replace(input, " "); 
    string output = regex2.Replace(temp, ""); 
    Console.OutputEncoding = Encoding.UTF8; 
    Console.WriteLine(input); 
    Console.WriteLine(output); 
    Console.ReadKey(true); 
    } 
} 

出力(あなたが変更する必要がありますルシーダコンソールへのコンソールフォントの項目を参照する):TABに加えて、今

•ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./ 
•árvíztűrő  tükörfúrógép 
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./ 
rvztr tkrfrgp 

、各行の先頭に箇条書きにもスペースに置き換えられました。

+0

ありがとう@kol、ユーザーはMSワードからデータをコピーしているので、 "and 'charsをサポートしたいと思います。上記の正規表現にどのように追加するのですか?これらの文字をそのまま追加しようとしましたが、期待どおりのフィルタはありません。これに関するどんな助けも非常に訴求されています。再度、感謝します。 – NoobDeveloper

+0

ようこそ。私は "と"は、有効な文字のセットにUnicode文字のエスケープシーケンスとして追加することができると思います。私は\ u2018- \ u201fを試してみてください。http://www.techabulary.com/u/unicode/ – kol

0

私はあなたが根本的な問題を診断するのではなく、「何らかの理由」と言っや症状を修正しようとしなければならないと思いますが、それはあなたの質問ではありません。

あなたは、この正規表現をお勧めします:

[^A-Za-z0-9~!\#\$\^&\*\(\)_\+\|`\-\=\\\{\};"\>\?\<\[\]:',\.\/] 

許可されていない文字と一致する文字は、String.Emptyに置き換えます。次に一致させたい:

\t 

" "で置き換えてください。

+1

あなたは必要ありません'[] 'を除く' [] 'の中から何かをエスケープする – Anirudha

+0

本当に真実ではない正規表現[\ s]を" s "と照らし合わせて試してみると、正規表現はバックスラッシュまたはsにマッチします。任意の空白文字。また、誰かの投稿を編集するときには、編集内容が回答を変更せず、無効にするようにしてください。 –

関連する問題