5

我需要编写一个正则表达式,以便在进一步发送之前替换用户输入中的无效字符。我想我需要用它string.replaceAll("regex", "replacement")来做到这一点。特定的代码行应该替换所有不是 unicode 字母的字符。所以这是一个Unicode字符的白名单。基本上它是验证和替换用户名字的无效字符。

到目前为止我发现的是:\p{L}\p{M},但我不知道如何在正则表达式中启动它,所以它会像我上面解释的那样工作。这会是一个正则表达式否定案例吗?

4

2 回答 2

9
于 2011-06-27T14:13:13.897 回答
2

我不相信 Java 的默认正则表达式库(阅读:在链接到 ICU 之外,即使它需要 JNI,我也建议这样做)支持您需要的 Unicode 属性。

如果是这样,您将包含\p{Diacritic}在您的模式中。但是您需要为此提供全面的财产支持。

我想您可以尝试(\pL\pM*)+但对于各种变音符号都失败了:如果某人的名字不仅仅是Étoile但是L’étoile怎么办?

另外,我认为验证人名的问题被认为几乎无法解决,因此您应该让人们使用他们喜欢的任何东西,可能会根据RFC 3454 的“stringprep”算法进行清理。

于 2011-06-27T14:12:08.530 回答