只允许名字和姓氏中间的空格

时间:2018-05-06 08:49:10

标签: javascript input text

尝试为我们遇到的问题找到解决方案。

当用户在输入文本框中输入值时,我们不希望用户能够在开头或最后一个单词之后输入空格

我们可以在开始时使用以下代码执行此操作,但是我们无法确定如何将此应用到最后,同时仍然允许在中间的空间。

    $(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”

5 个答案:

答案 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()

&#13;
&#13;
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;
&#13;
&#13;