10

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

例子:

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!
4

6 回答 6

21

对你有用^[a-z]([-']?[a-z]+)*( [a-z]([-']?[a-z]+)*)+$吗?

[a-z]确保名称始终以字母开头,然后[-']?[a-z]+允许使用分隔字符,只要它后跟至少另一个字母即可。*允许任意数量的这些部件。

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

于 2012-07-17T14:02:53.390 回答
6

更简单的版本

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

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

+\s名字后跟一个空格

+([\w\s]{3,})+第二个名字应该只包含长度为 3 或更多的字母,并且后面可以跟其他名字,也可以不跟

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

于 2019-09-25T17:53:55.640 回答
1
/^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$/g
于 2017-11-13T09:40:30.547 回答
0

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

^([a-zA-Zà-úÀ-Ú]{2,})+\s+([a-zA-Zà-úÀ-Ú\s]{2,})+$
于 2022-01-13T12:43:32.257 回答
0

这个答案也支持 unicode 字符。

^[\p{L}]([-']?[\p{L}]+)*( [\p{L}]([-']?[\p{L}]+)*)+$
于 2016-09-09T14:42:35.343 回答
-1

几点:

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

  2. 如果您确实使用构造函数,则在 RegExp 的情况下,您不需要定界正斜杠

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

  4. {1,}可以用修饰符写+

尝试

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

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

于 2012-07-17T12:38:50.243 回答