Alexander (HH): regexp: unicode als zeichenklasse

Beitrag lesen

Moin Moin!

gudn tach!

alert("aia".replace(/\u0130+/i, "X")); // prints "aia"
alert("aIa".replace(/\u0130+/i, "X")); // prints "aIa"
alert("aia".replace(/[\u0130]+/i, "X")); // prints "aXa" ???
alert("aIa".replace(/[\u0130]+/i, "X")); // prints "aIa"


> > ich verstehe nicht, warum im dritten beispiel eine ersetzung stattfindet. warum ist das so?  
>   
> /u0130 ist ein besonderes I.  
  
Ja, "LATIN CAPITAL LETTER I WITH DOT ABOVE", z.B. aus dem Türkischen.  
  

> warum bei ausgerechnet diesem eine ausnahme gemacht wird, bleibt mir schleierhaft,  
  
Es gibt im türkischen zwei "i"s, eines mit, eines ohne Punkt. Während im Deutschen der Punkt nur beim kleinen "i" vorkommt und das große "I" ohne Punkt dessen Equivalent ist, bleibt im Türkischen der Punkt / Nicht-Punkt bei der Umwandlung in Groß- bzw. Kleinbuchstaben erhalten.  
  
Siehe z.B. <http://www.codinghorror.com/blog/archives/001075.html>  
  

> aber man muss es wohl in javascript (nicht jedoch beispielsweise in perl oder php) so hinnehmen.  
  
In Javascript wird dieses Problem standardmäßig berücksichtigt, Perl muß man erst dazu überreden (per [locale](http://search.cpan.org/perldoc?perllocale) und Behandlung von Strings als Unicode), weil Perl traditionell mit Bytes statt mit Unicode-Zeichen arbeitet.  
  
Alexander

-- 
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".