跨越所有语言的特殊字符Java正则表达式

5
在我的用户输入字段中,我希望允许一些特殊字符、字母和数字的组合。我应该确保正则表达式模式允许从任何语言输入此设置。基本上,我构造的这个正则表达式也应支持Unicode表示。如何在Java中使用Pattern类实现这一点?
以下是我尝试过的示例代码。但这并没有涵盖除英语以外的其他语言中的字母/数字。
private static final String ADDRESS_LINE_PATTERN = "[A-Za-z0-9,\\s#\\-.]+";


    public static boolean isInputValid(String patternToValidate, String input){
        Pattern p = Pattern.compile(patternToValidate);
        Matcher m = p.matcher(input);
        boolean b = m.matches();
        return b;

    }

public static void main(){
String value = "コロン";
System.out.println("Value:" + value + " - valid? " + isInputValid(ADDRESS_LINE_PATTERN, value));
}
2个回答

5

您可以使用\\p{Alnum}来匹配任何语言的字母或数字。

 private static final String ADDRESS_LINE_PATTERN = "[\\p{Alnum},\\s#\\-.]+";

请查看Pattern javadoc获取更多信息。

谢谢!这个模式对于所有语言中的字母数字类都有效。但是它是否也能支持在所有语言中提到的特殊符号呢?换句话说,维基百科上说,在日语中,コロン相当于“:”。即使正则表达式中没有提到“:”,它仍然被接受。我有点困惑。特殊符号在不同语言中的Unicode编码是否不同? - Vinod Jayachandran
3
“コロン”这个日语词汇是“colon”在英语中的直接翻译,它是一个单词,而不是特殊字符。但是您想要匹配什么?有很多特殊字符,哪些是有效的,哪些是无效的? - RealSkeptic

0
通常,在支持Unicode的正则表达式引擎中,单词类别\w将包括来自任何语言的所有字母数字字符。
您可以使用其否定形式\W在负类[^\W]中,添加任何不想要的字符_,然后与您想要的特殊字符进行OR运算。
(?U)(?:[^\W_]|[-,.+\s#])+ 

编辑 - 回复 @nhahtdh 的评论
UNICODE_CHARACTER_CLASS 添加了 Java 的 (?U) 内联修饰符
(我认为是正确的)


在Java中,您需要使用(?U)UNICODE_CHARACTER_CLASS来使\w支持Unicode。 - nhahtdh
@nhahtdh - 已更新。我有一天会转向Java,但现在太忙了,还得使用C++。 - user557597

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接