正则表达式中间名首字母有或没有它

2024-05-12

我似乎无法正确验证用户 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(使用前将#替换为@)

正则表达式中间名首字母有或没有它 的相关文章

随机推荐