用于验证印度语言字符的 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 验证印度车辆编号的车辆编号