尝试为我们遇到的问题找到解决方案。
当用户在输入文本框中输入值时,我们不希望用户能够在开头或最后一个单词之后输入空格
我们可以在开始时使用以下代码执行此操作,但是我们无法确定如何将此应用到最后,同时仍然允许在中间的空间。
$(function() {
$('body').on('keydown', '#test', function(e) {
console.log(this.value);
if (e.which === 32 && e.target.selectionStart === 0) {
return false;
}
});
});
允许的
“Bob Smith”
不允许
“Bob Smith”
“Bob Smith”
“Bob Smith”
答案 0 :(得分:0)
只需使用javascript Trim方法,它就会删除输入前后的空格
所以,如果你有像#34;鲍勃史密斯",
它返回你" Bob Smith"
var str = " Bob Smith! ";
console.log(str.trim());
//输出" Bob Smith"
答案 1 :(得分:0)
如果您只是检查用户的选择是否结束,该怎么办?
if (e.which === 32 && (e.target.selectionStart === 0 || e.target.selectionStart === this.value.length && this.value.includes(" "))) {}
检查选择是否在输入的末尾并且它已经包含空格(即,您希望在两个名称之间允许的空间)。
使用.trim()
方法的其他答案适用于"keyup"
事件,在值更新后,但不在"keydown"
上(如您的问题中所示)。< / p>
答案 2 :(得分:0)
使用trim
" a ".trim()
will be -> "a"
如果你想知道用户是否在字段的前面或末尾插入了任何空格字符,只需在triming之后比较长度
" a ".trim().length === " a ".length
false
"a".trim().length === "a".length
true
答案 3 :(得分:0)
一个普通的解决方案可能是将值传递给正则表达式并获取每个keydown事件所需的位:
https://jsfiddle.net/ibowankenobi/0tvvpezt/2/
document.getElementsByTagName("input")[0].addEventListener("keydown",function(e){
var cT = e.currentTarget,
temp;
cT.value = (temp = cT.value.match(/\w+(?:\s+)?(?:\w+)?/gi), temp && temp[0] || "");
},false)
我允许在名字和姓氏之间留出多个空格,如果你想要改变它
答案 4 :(得分:0)
对于这种情况,您需要正则表达式。 我认为以下内容会有所帮助(您可能会找到更好的选择)。
如果您需要在输入之前和之后摆脱空格,可以使用trim()
。
function isCorrect(input) {
const regex = /^[A-Za-z]* [A-Za-z]*$/i;
if (input.match(regex)) {
return true;
} else {
return false;
}
}
const strs = [
"John Doi",
"Helen J",
" One more",
"Singlename",
"Jake Cham "
];
function test() {
const body = document.querySelector('body');
strs.forEach((e, i, arr)=> {
const li = document.createElement('p');
li.innerText = `Element #${i} - ${isCorrect(e)}`;
body.appendChild(li);
});
}
window.onload = () => {
test();
console.log('document loaded');
};
&#13;