用于验证印度语言字符的 Java REGEX 代码不起作用?

Posted

技术标签:

【中文标题】用于验证印度语言字符的 Java REGEX 代码不起作用?【英文标题】:Java REGEX code to validate Indian language characters not working? 【发布时间】:2013-04-26 11:15:58 【问题描述】:

为什么以下代码在印度语言中不起作用(导致错误)?

System.out.println(Charset.forName("UTF-8").encode("అనువాద")
                .asCharBuffer().toString().matches("\\pL+"));

System.out.println(Charset.forName("UTF-8").encode("स्वागत")
                .asCharBuffer().toString().matches("\\pL+"));

System.out.println(Charset.forName("UTF-8").encode("நல்வரவு")
                .asCharBuffer().toString().matches("\\pL+"));

以上所有代码都返回 false。这个正则表达式有什么问题?如何验证世界上的任何 unicode 字符?

【问题讨论】:

你应该做"అనువాద".matches("\\pL+")。进一步确保编辑器和编译器都使用相同的字符集(最好的 UTF-8)。 嗨 Joop,我确保编译器和编辑器使用 UTF-8。但仍然 "అనువాద".matches("\\pL+") 结果为假。 使用"(\\pL|\\pM)+",或者更好的@stema "[\\pL\\pM]+",也将变音符号视为有效。 【参考方案1】:

\pLetter 只捕获字母,但您还需要标记,您可以使用 \pMark 捕获。

System.out.println("स्वागत".matches("[\\pL\\pM]+"));

【讨论】:

效果很好。太感谢了?对所有国际角色都适用吗?你能解释一下标记吗?再次感谢。 简而言之,标记是与现有字符(如元音变音)组合的特殊字符。它还有很多,如果您需要了解更多,我建议您阅读这篇文章。 regular-expressions.info/unicode.html 我想知道为什么它接受所有输入。以下代码返回 ture。 System.out.println(Charset.forName("UTF-8").encode("स्वागत1@_!^#$%^&*!()_+") .asCharBuffer().toString().matches(" \\PL+\\PM+")); @suren:您的问题是,Charset.forName("UTF-8").encode("स्वागत1@_!^#$%^&*!()_+") .asCharBuffer().toString() 更改了原始字符串,因为 Java 字符是 UTF-16。 @suren,再次阅读答案,它已被更正,\pL+\pM+ 是错误的,并且只会意外地与您的测试字符串一起使用。

以上是关于用于验证印度语言字符的 Java REGEX 代码不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery Validation 验证印度车辆编号的车辆编号

python3的正则表达式(regex)

用于验证美国电话号码格式的 RegEx

RegEx 用于匹配除逗号分隔的数字之外的所有字符

java中怎么验证日期格式,要各种日期格式都能验证,代码比较简单的。

Java Regex 用于将带引号的字符串与转义引号匹配