Регулярное выражение
String regex = "^[\\p{IsHangul}\\p{IsDigit}]+";
И всякий раз, когда я
text.matches(regex);
Он отлично работает в моей системе, но не в некоторых системах. Я не могу отслеживать эту проблему.
Заранее спасибо.
Исключение:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown character property name {Hangul} near index 13
^[\p{IsHangul}\p{IsDigit}]+
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.charPropertyNodeFor(Pattern.java:2437)
at java.util.regex.Pattern.family(Pattern.java:2412)
at java.util.regex.Pattern.range(Pattern.java:2335)
at java.util.regex.Pattern.clazz(Pattern.java:2268)
at java.util.regex.Pattern.sequence(Pattern.java:1818)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.util.regex.Pattern.matches(Pattern.java:928)
at java.lang.String.matches(String.java:2090)
at com.mycompany.helper.ApplicationHelper.main(ApplicationHelper.java:200)
Кажется, что используемая вами версия Java не может распознать Hangul как правильный символ сценария, поэтому вы можете попытаться создать свой собственный класс символов, который будет охватывать тот же диапазон, что и у Hongul, из более новых версий Java.
Из того, что я вижу в коде в исходном коде Character.UnicodeScript
на Java 8 Hangul, относится к диапазонам Unicode
1100..11FF
302E..302F
3131..318F
3200..321F
3260..327E
A960..A97F
AC00..D7FB
FFA0..FFDF
поэтому, возможно, попробуйте с таким шаблоном
Pattern.compile("^["
+ "\u1100-\u11FF"
+ "\u302E-\u302F"
+ "\u3131-\u318F"
+ "\u3200-\u321F"
+ "\u3260-\u327E"
+ "\uA960-\uA97F"
+ "\uAC00-\uD7FB"
+ "\uFFA0-\uFFDF"
+ "\\p{IsDigit}]+");
Согласно использованию регулярных выражений в Java:
Java 5 исправляет некоторые ошибки и добавляет поддержку блоков Unicode...
Убедитесь, что вы используете Java 5+ на сервере.