我有一个单一的输入,用户应该输入名字和姓氏。问题是我需要使用检查正则表达式。有一个要求列表:
- 名称应以大写字母开头(不是空格)
- 不能有空间栈
有义务支持这些 Name 和 Surname(所有人都可以写他们的名字)。示例:
John Smith and Armirat Bair Hossan
最后一个符号不应该是空格。
请帮忙,
ATM 我有像这样的正则表达式
^\\p{L}\\[p{L} ,.'-]+$
但它拒绝所有输入,这不好
谢谢你帮助我
更新:
CORRECT INPUT:
"John Smith"
"Alberto del Muerto"
INCORRECT
" John Smith "
" John Smith"
最佳答案
你可以使用
^[\p{Lu}\p{M}][\p{L}\p{M},.'-]+(?: [\p{L}\p{M},.'-]+)*$
或
^\p{Lu}\p{M}*+(?:\p{L}\p{M}*+|[,.'-])++(?: (?:\p{L}\p{M}*+|[,.'-])++)*+$
参见 regex demo和 demo 2
Java 声明:
if (str.matches("[\\p{Lu}\\p{M}][\\p{L}\\p{M},.'-]+(?: [\\p{L}\\p{M},.'-]+)*")) { ... }
// or if (str.matches("\\p{Lu}\\p{M}*+(?:\\p{L}\\p{M}*+|[,.'-])++(?: (?:\\p{L}\\p{M}*+|[,.'-])++)*+")) { ... }
第一个正则表达式分解:
^
- 字符串的开头(matches()
方法不需要)[\p{Lu}\p{M}]
- 1 个 Unicode 字母(包括预组合字母,如\p{M}
匹配变音符号和\p{Lu}
匹配任何大写 Unicode 基本字母)[\p{L}\p{M},.'-]+
- 匹配 1 个或多个 Unicode 字母,a,
,.
、'
或-
(如果 1 个字母名称有效,请在末尾将+
替换为-
这里)(?: [\p{L}\p{M},.'-]+)*
- 0 个或多个序列[\p{L}\p{M},.'-]+
- 1 个或多个 Unicode 字母或逗号、句点、撇号或-
。
$
- 字符串结尾(matches()
方法不需要)
注意:有时,名称包含弯撇号,您可以将它们添加到字符类 ([‘’]
)。
第二个正则表达式效率较低但更准确,因为它只会匹配基本字母后的变音符号。在 regular-expressions.info 查看有关匹配 Unicode 字母的更多信息:
To match a letter including any diacritics, use
\p{L}\p{M}*+
.
关于java - 名字和姓氏的唯一正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33827826/