正则表达式中如何允许Unicode字母(p{L})后存在任意数量的末尾空格
解决方案
你之前的修改存在两个核心问题:
- 末尾的
[\\s]没有加量词,默认只能匹配单个空格,无法匹配多个连续空格 - 原有正则的字符组中保留了
'、-、,、.等符号,会导致ali.这类包含特殊字符的内容通过校验,不符合你的需求
你可以使用以下正则实现需求:
^\\s*[\\p{L}]+(?:\\s+[\\p{L}]+)*\\s*$
各部分规则说明:
^匹配字符串的起始位置,避免内容前出现非法字符\\s*匹配开头0个或多个空格,支持输入内容前有任意数量的空格[\\p{L}]+匹配至少1个Unicode字母,确保非空格内容只能是各国语言的字母(?:\\s+[\\p{L}]+)*非捕获组,匹配0次或多次「1个以上空格 + 1个以上字母」的组合,支持中间用空格分隔多个姓名\\s*匹配末尾0个或多个空格,支持输入内容后有任意数量的空格$匹配字符串的结束位置,避免内容后出现非法字符
修改后的调用代码示例:
validator.addValidation(userNameLayout, "^\\s*[\\p{L}]+(?:\\s+[\\p{L}]+)*\\s*$", context.resources.getString(R.string.verification_userdata_name_invalid))
如果你的业务确实需要支持姓名中出现'、-这类合法的姓名特殊字符(比如O'Conner、Jean-Pierre),可以把字母的字符组修改为[\\p{L}\\-']即可,调整后正则为:
^\\s*[\\p{L}\\-']+(?:\\s+[\\p{L}\\-']+)*\\s*$
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

