Encontré un problema interesante sobre el método de concordancias de String (RegExp).Comportamiento extraño del método de coincidencias de String()
assertTrue("33CCFF".matches("[0-9A-Za-z]{6}"));
assertTrue("CC33FF".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3355".matches("[0-9A-Za-z]{6}"));
assertTrue("CC9955".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3366".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3965".matches("[0-9A-Za-z]{6}"));
assertTrue("CC1961".matches("[0-9A-Za-z]{6}"));
assertTrue("CC9999".matches("[0-9A-Za-z]{6}"));
assertTrue("СС3966".matches("[0-9A-Za-z]{6}")); // failing
assertTrue("СС9965".matches("[0-9A-Za-z]{6}")); // failing
assertTrue("СС9966".matches("[0-9A-Za-z]{6}")); // failing
Las últimas 3 afirmaciones fallan inesperadamente. No pude encontrar ninguna razón por la cual este extraño comportamiento está sucediendo. ¿Tienes el mismo problema? ¿Tienes alguna idea?
Por cierto, en caso de que me pregunten, mi versión de Java es la siguiente.
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
Indagué después de sus respuestas y noté que los caracteres C superiores (& # 0043) son diferentes a los caracteres C inferiores (& # 1057). Los caracteres C en las últimas 3 líneas parecen ser del alfabeto cirílico. http://webdesign.about.com/od/localization/l/blhtmlcodes-ru.htm – lemiorhan
El problema ocurre debido a la entrada del usuario. Para verificar si la entrada es alfa-decimal (incluso para Círica C), org.apache.commons.lang.StringUtils.isAlphanumeric() está devolviendo verdadero como el siguiente: assertTrue (StringUtils.isAlphanumeric ("\ u0421 \ u0421")) ; // cirílico C assertTrue (StringUtils.isAlphanumeric ("\ u00E7 \ u00E7")); // ascii C – lemiorhan