Hej! har du provat med att köra validering av textfälten som matas in.Tror man kan ställa in i valideringen vila tacken som får vara med. Enligt följande blog-entry: Tack Björne! Tack Joakim, men koden ska alltså generera mejladresser utifrån en redan existerande databas med personuppgifter. Och det ska vara helt ok att t.ex. heta "Åhl" med "Å" i efternamn. :-) Inmatningsvalidering skulle alltså inte hjälpa här. Men nu löste det ju sig ändå."Tvätta bort" icke 7-bitars ASCII-tecken ur strängar
Har en lite kodsnutt som tar en användares förnamn och efternamn och genererar en e-postadress utifrån detta.
Snutten ersättar å och ä med a, ö med o, é med e, ñ med n osv, genom regex.replace för varje tecken/ersättningstecken.
Min fråga är helt enkelt: finns det något enklare sätt? Typ en inbyggd regexmetod eller möjligen regexoption som konverterar tecken med accenter, diakriter osv till deras "icke-accentade" motsvarighet, ungefär som man kan ignorera kapitalisering mha regex?
Eller nån fin metod nån annastans i ramverket, typ System.Globalization eller nåt sånt?
Antar att svaret är nej, men man lever ju på hoppet... :-)
/JonasSv: "Tvätta bort" icke 7-bitars ASCII-tecken ur strängar
Sv:"Tvätta bort" icke 7-bitars ASCII-tecken ur strängar
http://blogs.msdn.com/michkap/archive/2005/02/19/376617.aspx
så kommer det en Normalize-funktion i .NET 2.0
Jag skrev ihop ett program som använder FoldString-functionen som nämns i bloggen.
using System;
using System.Runtime.InteropServices;
using System.Text;
class MittProgram {
[STAThread]
static void Main() {
Console.WriteLine( cleanup("abc dêf åxo Öland |") );
}
[Flags]
private enum MapFlags {
MAP_FOLDCZONE = 0x00000010,// fold compatibility zone chars
MAP_PRECOMPOSED = 0x00000020,// convert to precomposed chars
MAP_COMPOSITE = 0x00000040, // convert to composite chars
MAP_FOLDDIGITS = 0x00000080 // all digits to ASCII 0-9
}
[DllImport("kernel32.dll")]
static extern bool FoldString(MapFlags dwMapFlags, string lpSrcStr, int cchSrc,
[Out] StringBuilder lpDestStr, int cchDest);
static string cleanup(string value) {
StringBuilder sb = new StringBuilder(value.Length * 2);
FoldString(MapFlags.MAP_COMPOSITE,value,value.Length,sb,value.Length*2);
StringBuilder ret = new StringBuilder(value.Length);
foreach ( char c in sb.ToString() ) if ( char.IsLetter(c) ) ret.Append(c);
return ret.ToString();
}
}
// MvH Björne
Sv: "Tvätta bort" icke 7-bitars ASCII-tecken ur strängar
Gamla goda win-api:er till räddningen alltså.
Ja, ibland glömmer man bort att .NET inte har tillgång till allt godis.
Mycket intressant detta med normaliseringsfunktionerna i Whidbey.
mvh
/JonasSv:"Tvätta bort" icke 7-bitars ASCII-tecken ur strängar
mvh
/Jonas