gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:07:15 24 4
gpt4 key购买 nike

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

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com