Regex 对不同类型的名称使用正则表达式验证名称

Regex 对不同类型的名称使用正则表达式验证名称,regex,performance,validation,Regex,Performance,Validation,我有这个正则表达式代码:^([a-zA-Z]{1,}'?-?\s?[a-zA-Z]{1,}'?-?\s[a-zA-Z]{1,}\s?([a-zA-Z]{1,}) 我可以插入以下名称: John Smith John Doe-Smith John Doe Smith Hector S

我有这个正则表达式代码:^([a-zA-Z]{1,}'?-?\s?[a-zA-Z]{1,}'?-?\s[a-zA-Z]{1,}\s?([a-zA-Z]{1,})

我可以插入以下名称:

John Smith                                       
John Doe-Smith                                   
John Doe Smith                                   
Hector Sausage-Hausen                            
Mathias Sausage'd                                
Martin Luther King                               
Ai Wong                                          
Chao Chang                                        
Alzbeta Bara
ANDREW ROTARACT
ION-APOSTOL Marius Andrei
ION-APOSTOL Marius Andrei-Mihai
Cosmin Marius-Marian
Cosmin-Marian Marius
John Mc'Largy
Mc'Largy John
D'Largy John
John D'Largy
我想能够插入至少2个字母的名字。ie:合作 我不想输入这些名称:Co s、C St、Henkel1、Kenkel1雀巢、12344、Henkel&Henkel(如&、.#%^*()!@~) 同时,我希望能够添加一些名字,如:John Mc'Largy
const regex=/^[a-z-']{2,}([a-z-']{2,}[]?)+$/gim;
const str=`约翰·史密斯
约翰·多伊·史密斯
约翰·多伊·史密斯
赫克托·豪森
马蒂亚斯香肠
马丁路德金
王艾
麦克拉吉·约翰
成本
Co s
C街
汉高1
肯克尔1雀巢
12344
汉高&汉高
最大Ap
最大Ap&
安德鲁`;
const result=str.match(正则表达式);
控制台日志(结果)这个怎么样

^[a-zA-Z'-]{2,} ([ ]?[a-zA-Z'-]{2,})+$
我是怎么想到的:

PART 1
  [a-zA-Z'-]                                 = names with letters, quotes and hyphens...
  [a-zA-Z'-]{2,}                             = ... with at least 2 characters

PART 2 (double PART 1)
  [a-zA-Z'-]{2,} [a-zA-Z'-]{2,}              = there must be at least 2 name parts separated with a space
  [a-zA-Z'-]{2,} ([ ]?[a-zA-Z'-]{2,})+       = the last section can be repeated multiple times with an (optional) space in front of each part
 ^[a-zA-Z'-]{2,} ([ ]?[a-zA-Z'-]{2,})+$      = but nothing else on the line

您所需的正则表达式是
^[A-Za-z][A-Za-z'][A-Za-z-]*\s[A-Za-z]{2,}[A-Za-z'-]*$

说明:

  • 第一个字符应该是字母表
  • 第二个字符应该是字母表或
  • 在前两个字符之后,可以有任意数量(零个或更多)的字母表或
    -
    后跟空格
  • 空格后应至少有2个字母后跟任意数量(零或更多)的字母、空格、
    -
    '

  • 查看演示和更多解释。

    相关:“我希望能够插入至少两个字母的姓名。”我认识一个人,他的法定姓名只有一个字符长。然而,由于像这样的限制,他不能与一些公司签约,仅仅因为他们的系统不会接受“有效”,即使它非常有效。这包括电力公司,所以他甚至无法在至少一家公司取得账户,这意味着他无法获得电力。至少从那家公司——幸运的是,另一家公司没有那么随意的限制。幸运的是,我们现在的客户至少有两个字母:)你确定你永远不会有新客户吗?或者你现在的任何客户都不会改变他们的名字?我认识的那个人确实合法地改变了他的名字,他出生时没有一个字符的名字。非常感谢,但我仍然可以输入像:M Andrew这样的值。我需要至少2个字母的名字和第二个名字;如果我尝试插入co ms,我不能,因为至少有3个字母,而不是2:)谢谢你,先生,现在可以:)但我可以添加这样的名称:John Doe Smith抱歉,这是我的错,代码很好:)我会使用你的代码,先生,非常感谢:)现在我可以添加这个名字:)非常感谢您的时间和您的支持:)现在我再次检查了所有的名字,我仍然可以添加一个名字(对不起,我没有在我的第一篇文章中添加这个),但我不想只添加安德鲁,我想添加他的全名:Andrew Jonson或Matthew Race:)谢谢你alotropico^([a-zA-Z'-]{2,}[]?){2,}$这个表达式是最好的:)你可以添加一个选项,我可以添加最小2个名称?我不想只加上安德鲁或尼古拉斯,我想至少加上两个名字,比如:安德鲁·马修或尼古拉斯·我。再次感谢您的支持,先生:)答案更新(基本上重复我最初的解决方案)。