大家好我需要制作符合以下要求的正则表达式:
字母数字 可以包含任何有效的Unicode字符,包括空格或标点符号,但我们不应允许前导或尾随空格。
^[\\p{S}\\p{L}\\d\\p{P}][\\p{L}\\d\\p{P} ]{4,18}[\\p{L}\\d\\p{P}]$
现在我正在使用这个但是对于某些unicode字符不能正常工作,例如:§
我不是正则表达式的专业人士,所以我要求一些帮助,谢谢。
答案 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代码点和与未映射的补充代码点相对应的代理对,我认为不可能排除这些代码点。