我似乎无法正确验证用户 FirstName + LastName 并检查 MiddleName,如下所示:
John Doe - Valid
John M Doe - Valid
John Mr Doe - Invalid
John m Doe - Invalid
因此,MiddleName 只能是大写字母。
我想出了什么:
- 名字 + 姓氏应至少有 3 个字符 - 好的
- 应始终为名字和姓氏 - 好的
无法弄清楚如何检查 MiddleName 是否只有 1 个字符(如果存在)。
我当前的正则表达式是这样的:
var isValid = /^((\b[a-zA-Z]{3,40}\b)\s*){2,}$/.test($(this).val());
// ^((\b[a-zA-Z]{3,40}\b)\s*){2,}$ - actual regex
您可以使用
/^[a-zA-Z]{3,40}(?:\s[A-Z])?\s[a-zA-Z]{3,40}$/
See the 正则表达式演示 https://regex101.com/r/NeIl6T/3. NOTE: {3,40}
is a 限制量词 https://www.regular-expressions.info/repeat.html#limit匹配 3 到 40 个连续出现的量化子模式(即[a-zA-Z]
字母图案在这里。如果您不打算限制名字和姓氏的上限(最大字母限制),只需删除40
.
Details
-
^
- 字符串的开头
-
[a-zA-Z]{3,40}
- 3 至 40 个 ASCII 字母
-
(?:\s[A-Z])?
- (here) an optional sequence of
-
\s
- 一个空格
-
[A-Z]
- 一个单一的大写ASCII 字母
-
\s
- 一个空格
-
[a-zA-Z]{3,40}
- 3 至 40 个 ASCII 字母
-
$
- 字符串末尾。
JS demo:
var strs = [' John Doe', 'John M Doe', 'John Mr Doe', 'John m Doe'];
var rx = /^[a-zA-Z]{3,40}(?:\s[A-Z])?\s[a-zA-Z]{3,40}$/;
for (var s of strs) {
console.log(s, "=>", rx.test(s));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)