我想编写一个正则表达式来检查用户是否插入了至少两个由至少一个空格隔开的单词:
示例:
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!
答案 0 :(得分:11)
^[a-z]([-']?[a-z]+)*( [a-z]([-']?[a-z]+)*)+$
是否适合您?
[a-z]
确保名称始终以字母开头,然后[-']?[a-z]+
允许分隔字符,只要它后跟至少另一个字母。 *
允许任意数量的这些部分。
下半部分( [a-z]([-']?[a-z]+)*)
匹配一个空格,后跟另一个相同模式的名称。 +
确保至少存在一个附加名称,但允许更多名称。如果您只想允许两个或三个部分名称,则可以使用{1,2}
。
答案 1 :(得分:1)
这个答案也支持unicode字符。
^[\p{L}]([-']?[\p{L}]+)*( [\p{L}]([-']?[\p{L}]+)*)+$
答案 2 :(得分:1)
简单版本
/^([\w]{3,})+\s+([\w\s]{3,})+$/i
([[w] {3,})),名字只能包含长度为3或更大的字母
+ \ s ,名字后面应有一个空格
+([\ w \ s] {3,})+ 第二个名称只能包含长度为3或更大的字母,并且可以跟在其他名称之后
/ i 忽略字母的大小写。可以是大写或小写字母
答案 3 :(得分:0)
有几点:
在JavaScript中,通常最好使用文字而不是命名构造函数(所以/pattern/
而不是new RegExp()
。(当然,有时你需要构造函数路径)。
如果您使用构造函数,则在RegExp的情况下,您不需要分隔正斜杠
您当前的模式仅匹配第一个单词
{1,}
可以使用修饰符+
尝试
/^([a-z']+(-| )?)+$/i
注意姓氏允许双桶姓氏。
答案 4 :(得分:0)
/^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$/g