unicode, regexp og bogstavet i
Jeg forsøger at lave et RegExp som scanner en tekst for ulovlige karakterer men er stødt ind i et problem som jeg har prøvet at skitserer i den følgende. Hvis den beskrevne fejl ikke opstår så prøv at paste den fra Word.Lav en windows form med 1 textbox (textBox1) og 3 labels (label1, label2,lavel3) bind textBox1 eventen TextChanged op på følgende funktion.
private void textBox1_TextChanged(object sender, System.EventArgs e) {
label1.Text = "";
label2.Text = "";
label3.Text = "";
Regex RegExp_A_2_Z = new Regex(@"[a-z]",RegexOptions.IgnoreCase);
Regex RegExp_Chr0000_2_Chr00FF = new Regex(@"[\u0000-\u00FF]",RegexOptions.IgnoreCase);
Regex RegExp_Over_Chr00FF = new Regex(@"[\u00FF-\uFFFF]",RegexOptions.IgnoreCase);
string TestStr1 = textBox1.Text;
foreach (Match M in RegExp_A_2_Z.Matches(TestStr1)) label1.Text += M.ToString();
foreach (Match M in RegExp_Chr0000_2_Chr00FF.Matches(TestStr1)) label2.Text += M.ToString();
foreach (Match M in RegExp_Over_Chr00FF.Matches(TestStr1)) label3.Text += M.ToString();
}
Prøv nu at skrive ”abcdefgh” i tekstboxen.
label1 viser nu alle bogstaver mellem a og z altså ”abcdefgh”.
label2 viser alle karakterer med en unicode mellem 0 og 256 altså ”abcdefgh”.
label3 viser alle karakterer over unicode 256 altså ingen ting.
Men prøv nu at tilføje ”ijklmnop” til tekstboxen.
label1 og label2 viser hvad men vil forvente, men label3 viser ”i”.
Spørgsmålet er derfor som følgende. Hvorfor mener regexp at i befinder sig i både unicode intervallerne 0-FF og FF-FFFF. Og hvordan omgår jeg det i mit regexp.