1

我正在尝试验证一个表单以使用户输入他们的全名,如下所示..

第一,最后

用户必须有一些纯字母字符的字符串,然后是逗号,然后是空格,然后是姓氏,这又可以是任何字符字符串。

这是我目前的正则表达式..

var alphaExp = /^[a-zA-Z,+ a-zA-Z]+$/;

但是,它允许用户提交一些简单的东西,比如 john. 我希望它强迫他们提交诸如约翰、史密斯之类的东西。

4

4 回答 4

3

您正在做的是创建一个[]匹配以下任何字符的字符类 ( ):a-zA-Z,+. 这允许john匹配整个正则表达式。

这就是你想要的:

/^[a-zA-Z]+, [a-zA-Z]+$/

但是,我想建议您,对名称进行假设是有点错误的。如果有人叫约翰奥康纳怎么办?还是埃斯特万·佩雷斯?还是只是 Ng(只有名字)?

“认为某人的名字只能包含某些字符的代码是愚蠢、冒犯和错误的” - tchrist

当然,您不想让人们只输入胡言乱语,而是为用户留下一个选项,让他们输入不一定符合您对正确性的看法,但仍然是正确的。

于 2012-11-15T20:20:19.497 回答
1

这不是字符集的工作方式:

/^[a-zA-Z]+, [a-zA-Z]+$/

需要考虑的事项:

  • 您在客户端上进行的任何验证都可以被绕过
  • 有些人的名字可能带有重音字母
  • 有些文化不只使用两个名字
于 2012-11-15T20:20:38.260 回答
0
^[a-zA-Z]+, [a-zA-Z]+$

应该工作,但是,你想阻止'.'吗?就像 J. Hooker 一样?还有更多的词,比如“Jan van Hoogstrum”?另请注意,您正在防止使用任何重音字符。一个选项(尽管它允许使用下划线)是使用\w

^(\w+ )$

这会给你'name name name ...'。“第一,最后”不是输入您姓名的常用方式,因此您会以这种方式让很多用户感到沮丧。

于 2012-11-15T20:21:11.513 回答
0

仅允许首字母大写的正确正则表达式是:

/^[A-Z][a-z]+, [A-Z][a-z]+$/

于 2012-11-15T20:22:36.720 回答