Regex 名称的正则表达式模式是什么?

Regex 名称的正则表达式模式是什么?,regex,validation,Regex,Validation,这些规则的正则表达式模式是什么: 名称第一位的大写字母 有效:约翰 无效:JohN 在名称中间的大写是允许的,但只有一次。 有效:麦克阿瑟 无效:麦克阿瑟 只使用撇号(′)一次,必须在名称的中间。 有效:Mac O'Brian 无效:Mac'O'Brian这是一个全局正则表达式,适用于世界各地任何文化中的所有名称 ^.+$ 不客气 您试图做的是在一个非常开放的领域上施加复杂的验证。考虑提供给定名称和姓氏< /代码>输入字段。 如果您真的打算进行验证(例如在Web窗体或帐户注册),我

这些规则的正则表达式模式是什么:

  • 名称第一位的大写字母
有效:约翰 无效:JohN

  • 在名称中间的大写是允许的,但只有一次。
有效:麦克阿瑟 无效:麦克阿瑟

    只使用撇号(′)一次,必须在名称的中间。
有效:Mac O'Brian
无效:Mac'O'Brian

这是一个全局正则表达式,适用于世界各地任何文化中的所有名称

^.+$
不客气


您试图做的是在一个非常开放的领域上施加复杂的验证。考虑提供<代码>给定名称<代码>和<代码>姓氏< /代码>输入字段。

如果您真的打算进行验证(例如在Web窗体或帐户注册),我会关注DamiiNeth-Tun-Beliver的评论。也许最好让人们随意拼写自己的名字;有更好的方法在事后识别巨魔

但是,作为一个智力练习,这里有一个正则表达式,它根据您给出的示例进行验证。这是PCRE语法;您可能需要根据您的特定正则表达式语法或风格对其进行调整或修改:

[A-Z][a-z]+(?:[A-Z]?'?|'?[A-Z])[a-z]+
请注意,您必须将其分别应用于每个姓名或姓名部分,但由于您的验证模式主要由西欧姓氏惯例驱动,因此仅应用于姓氏可能是有意义的

[A-Z][a-z ]*   (?:   [A-Z]?[a-z ]*\'?   |   \'?[a-z ]*[A-Z]?   )   [a-z ]+

去掉方括号外的空白,我把它们放在方括号内只是为了让不同的部分清晰明了。

祝你好运……你试过什么?根据标记菜单:“询问代码的问题*必须表明对正在解决的问题的最低理解程度*。包括尝试的解决方案、为什么不起作用以及预期结果。另请参见:。“Jan de Wit”、“Paul Henri Carle de Limoges”等名称如何。有多少空格是可以的。在你们的世界里,所有的“词语”都需要以首都开头吗?多个单词可以有撇号吗?连字符呢?是一个有趣的阅读,即使你决定它不适用于你的情况。告诉某人他们的名字无效通常是一个糟糕的用户体验。它确实排除了无名者…:)“我想你指的是名字,因为在世界大部分地区(大多数?),姓是第一个名字。”拉斯曼同意。我在打字时注意到了这个问题,但想不出正确的单词。@deceze认为这是因为我懒得抬头看是否应该使用*或+:d这假设中间撇号在中间大写字母的旁边。原来的问题没有这个假设;我认为这是暗示(撇号分隔爱尔兰/苏格兰风格名称的名称部分)。但最好不要在涉及规范时做出假设。