正则表达式只接受Unicode

时间:2015-03-12 17:56:20

标签: java regex unicode

大家好我需要制作符合以下要求的正则表达式:

字母数字 可以包含任何有效的Unicode字符,包括空格或标点符号,但我们不应允许前导或尾随空格。

^[\\p{S}\\p{L}\\d\\p{P}][\\p{L}\\d\\p{P} ]{4,18}[\\p{L}\\d\\p{P}]$

现在我正在使用这个但是对于某些unicode字符不能正常工作,例如:§

我不是正则表达式的专业人士,所以我要求一些帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

由于你绝对允许除了尾随或前导空格以外的所有内容,那么你可能不需要正则表达式:

boolean valid = !string.startsWith(" ") && !string.endsWith(" ");

如果您的意思是尾随或引导空格,请尝试:

boolean valid = string.trim().equals(string);

答案 1 :(得分:0)

这个正则表达式......

^(?:[^\p{Z}\p{Cc}](?:.*[^\p{Z}\p{Cc}]))$

...匹配既不以Unicode类别Z(间隔字符)或抄送(控制字符)中的字符开头也不结尾的Java String。它将匹配空字符串;如果它不应该这样做,它可以简化一点。它会接受不成对的surogates,但如果需要的话可以通过更复杂的正则表达式排除它们。它将接受未映射的BMP代码点和与未映射的补充代码点相对应的代理对,我认为不可能排除这些代码点。