用于检查全名的regexp

regexp for checking the full name

本文关键字:regexp 全名 检查 用于      更新时间:2023-10-02

我想写一个正则表达式来检查用户是否插入了至少两个由一个空格分隔的单词:

示例:

var regexp = new RegExp(/^[a-z,',-]+('s)[a-z,',-]+$/i);
regexp.test("D'avid Camp-Bel"); // true
regexp.test("John ---"); // true // but it should be false!

^[a-z]([-']?[a-z]+)*( [a-z]([-']?[a-z]+)*)+$适用于您吗?

[a-z]确保名称总是以字母开头,那么[-']?[a-z]+允许使用分隔字符,只要它后面至少有另一个字母。*允许任何数量的这些部件。

后半部分,( [a-z]([-']?[a-z]+)*)匹配一个空格,后面跟有相同模式的另一个名称。+确保至少存在一个附加名称,但允许更多名称。(如果只允许两个或三个部分名称,则可以使用{1,2}

更简单的版本

    /^(['w]{3,})+'s+(['w's]{3,})+$/i

([''w]{3,})名字应该只包含字母,长度为3或更多

+''s名字后面应该跟一个空格

+([''w''s]{3,})+第二个名称只能包含长度为3或以上的字母,后面可以跟其他名称,也可以不跟

/i忽略字母的大小写。可以是大写或小写字母

/^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$/g

这个版本允许使用重音字符,对我来说效果很好!

^([a-zA-Zà-úÀ-Ú]{2,})+'s+([a-zA-Zà-úÀ-Ú's]{2,})+$

此答案还支持unicode字符。

^['p{L}]([-']?['p{L}]+)*( ['p{L}]([-']?['p{L}]+)*)+$

几个要点:

  1. 在JavaScript中,通常最好使用文字而不是命名构造函数(因此/pattern/而不是new RegExp()。(当然,有时您需要构造函数路由)。

  2. 如果你确实使用了构造函数,那么在RegExp的情况下,你不需要分隔的正斜杠

  3. 您当前的模式只匹配第一个单词

  4. {1,}可以用修改器+ 写入

尝试

/^([a-z']+(-| )?)+$/i

请注意,姓氏允许使用双筒姓氏。