我需要一个正则表达式来检查输入是否最多 25 个字符,并且是否有两个字符串(名字和姓氏)由空格字符分隔。到目前为止,我有这个,
var name=$('#name').val();
var namePattern = /^[\sA-Za-z]{25}$/;
if(namePattern.test(name))
{
return true;
}
我需要一个正则表达式来检查输入是否最多 25 个字符,并且是否有两个字符串(名字和姓氏)由空格字符分隔。到目前为止,我有这个,
var name=$('#name').val();
var namePattern = /^[\sA-Za-z]{25}$/;
if(namePattern.test(name))
{
return true;
}
为什么要使用正则表达式?
if (name.length < 26 && name.indexOf(' ') > 1) {
// the name's 25 characters or less
// there's at least one character before the space
}
显然,这是一个 JavaScript 实现,但这是因为您的问题同时附加了php 和 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';
});
该表达式将:
'
允许在名称中使用连字符。当然,您认为有效的名称实际上取决于您。小心,因为[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