java - 名字和姓氏的唯一正则表达式

标签 java regex string validation input

我有一个单一的输入,用户应该输入名字和姓氏。问题是我需要使用检查正则表达式。有一个要求列表:

  1. 名称应以大写字母开头(不是空格)
  2. 不能有空间栈
  3. 有义务支持这些 Name 和 Surname(所有人都可以写他们的名字)。示例:

    John Smith
    and
    Armirat Bair Hossan 
    
  4. 最后一个符号不应该是空格。

请帮忙,

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 demodemo 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/

相关文章:

c - 将字符数组作为参数传递(C 内核代码)

java - jaxb 中的 Map<String, MyObject>

java - 异常处理导致的无限循环

java - Qt:如何突出显示 QListWidget 中的重复项目? (qtjambi)

regex - Ansible regex_search 标准输出不工作,但在 regex101.com 中工作

ruby - 在 ruby​​ 中组合符号

java - 解析并捕获字符串末尾的数字

java - 调整 CloudBees 应用程序的 JVM 参数

javascript - 替换与正则表达式不匹配的字符串部分

android - 处理剧透 BBcode Android