我想检查input
,如果输入为空或输入连续空格,则显示错误。 单词之间只允许一个空格。 例如:
正常测试
var pattern = /ss+/g;
$('a').click(function() {
if ($('input').val().length <= 2 || pattern.test($('input').val())) {
alert('error');
} else {
alert('ok go');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a>check</a>
<input type="text"/>
它似乎有效,但它有问题,这样做以找到此问题:
连续输入5个空格,然后单击检查,它会提醒error
但再次单击检查,它会提醒ok
。
当用户连续输入超过 2 个空格时应出错。
您可以使用trim方法,该方法比if语句中的代码更好。
trim() 方法从字符串的两端删除空格,在本例中为输入的值,之后您可以检查它是否等于空字符串并且工作正常
请参阅下面的示例
var pattern = /ss+/g;
$('a').click(function() {
if ($('input').val().trim()==='') {
alert('error');
} else {
alert('ok go');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a>check</a>
<input type ="text" />
从 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test:
如果正则表达式设置了全局标志,
test()
将lastIndex
推进 正则表达式。随后使用test()
将在str
的子字符串处开始搜索 由lastIndex
指定(exec()
也将推进lastIndex
属性)。
问题是在您的正则表达式与字符串匹配后,lastIndex
属性将导致下一个匹配项在上一个匹配项之后开始。您可以通过在每次单击后输出pattern.lastIndex
的值来验证这一点。
您可以通过在每次匹配后手动将lastIndex
设置为零来解决此问题,例如
$('a').click(function() {
pattern.lastIndex = 0;
if ($('input').val().length <= 2 || pattern.test($('input').val())) {
alert('error');
} else {
alert('ok go');
}
});
您还可以通过一起摆脱pattern
并编写来修复
$('a').click(function() {
if ($('input').val().length <= 2 || /ss+/g.test($('input').val())) {
alert('error');
} else {
alert('ok go');
}
});
请注意,您可以将模式更改为两次或多次/s{2,}/g
匹配的空格。