1

我需要一个正则表达式来检查输入是否最多 25 个字符,并且是否有两个字符串(名字和姓氏)由空格字符分隔。到目前为止,我有这个,

var name=$('#name').val();
var namePattern = /^[\sA-Za-z]{25}$/;

if(namePattern.test(name))
{
return true;
}
4

2 回答 2

5

为什么要使用正则表达式?

if (name.length < 26 && name.indexOf(' ') > 1) {
    // the name's 25 characters or less
    // there's at least one character before the space
}

显然,这是一个 JavaScript 实现,但这是因为您的问题同时附加了

对于“布鲁斯”通过验证的问题,$.trim()在您分配给name变量的字符串和该变量split() 使用函数将防止误报。给定以下 HTML:

<ul>
    <li>Bruce</li>
    <li>Bruce </li>
    <li>Bruce Wayne</li>
    <li>Brucewayne</li>
</ul>

使用以下内容,因为您使用 jQuery 标记了问题:

$('li').addClass(function(){
    var name = $.trim($(this).text());
    return name.length < 26 && name.split(/\s+/).length > 1 ? 'pass' : 'fail';
});

JS 小提琴演示

于 2013-07-19T20:53:59.997 回答
0

描述

该表达式将:

  • 验证字符串的长度最多为 25 个字符
  • 跳过任何前导或尾随空格
  • 中间需要 1 个空格字符
  • 将名字和姓氏捕获到两个单独的捕获组中
  • '允许在名称中使用连字符。当然,您认为有效的名称实际上取决于您。小心,因为[a-z]不会验证重音字符

.

^(?=\s*\S[^\r\n]{0,23}\S\s*\Z)\s*([a-z-']+)\s([a-z-']+)\s*\Z

在此处输入图像描述

例子

现场演示: http ://www.rubular.com/r/j9jfyJrIqP

示例文本

请注意,在实时示例和此示例文本中,有前导和尾随空格。

      Mc'David Johnson-Smith     

捕获组

[0][0] =       Mc'David Johnson-Smith     
[0][2] = Mc'David
[0][3] = Johnson-Smith
于 2013-07-19T23:15:31.810 回答