Javascript 以交互方式,don';t不允许文本输入中的第一个字符是空格或一组空格

Javascript 以交互方式,don';t不允许文本输入中的第一个字符是空格或一组空格,javascript,Javascript,首先,这不是一个重复的问题。我遇到的大多数类似问题都不会以交互方式执行所需的操作(例如“onkeydown”、“onkeydup”等)。我需要一个纯JavaScript(即,无jQuery)函数来禁止基于文本的输入的第一个字符是一个空格或一组空格,只要给定元素ID即可。我有: <script type="text/javascript"> /* Don't allow the first character of a "text-based" input element * (e

首先,这不是一个重复的问题。我遇到的大多数类似问题都不会以交互方式执行所需的操作(例如“onkeydown”、“onkeydup”等)。我需要一个纯JavaScript(即,无jQuery)函数来禁止基于文本的输入的第一个字符是一个空格或一组空格,只要给定元素ID即可。我有:

<script type="text/javascript">

/* Don't allow the first character of a "text-based" input element
 * (e.g. text-box, text-area, editable-div's) to be a space, given
 * the elements ID ([ eID ]). [BEGIN]
 */

function noPrecedingSpace ( eID )
{

    var elmt = document.getElementById(eID);

    elmt.addEventListener("keydown", function(event)
    { 
        var strg = elmt.value;
        var lastChar = strg.charAt(strg.length - 1);

        if ((lastChar == " ")||(lastChar == "&nbsp;")||(strg == ""))
        {
            return event.which !== 32;
        };
    }); 

};

/* Don't allow the first character of a "text-based" input element
 * (e.g. text-box, text-area, editable-div's) to be a space, given the
 * elements ID ([ eID ]). [END]
 */

</script>

/*不允许“基于文本”输入元素的第一个字符
*(例如,文本框、文本区域、可编辑分区)为给定的空格
*元素ID([eID])。[开始]
*/
函数NoReceidingSpace(eID)
{
var elmt=document.getElementById(eID);
elmt.addEventListener(“键控”,函数(事件)
{ 
var strg=elmt.值;
var lastChar=strg.charAt(strg.length-1);
如果((lastChar==“”)| |(lastChar==“”)| |(strg==“”)
{
return event.which!==32;
};
}); 
};
/*不允许“基于文本”输入元素的第一个字符
*(例如,文本框、文本区域、可编辑分区)是一个空间,给定
*元素ID([eID])。[完]
*/
你知道为什么这不起作用吗

我做错了什么

请注意:“粘贴”已经被另一个javascript考虑在内,并且在该字段中被禁止,顺便说一句,它工作得很好


您可以使用正则表达式测试输入的值,查看它是否以空格开头,如果是,则从值的开头删除空格

var input = document.getElementById('noSpaces');

input.addEventListener('keyup', function(event) {
   if(/^\s/.test(input.value)) {
     input.value = input.value.replace(/^\s+/,'');   
   }
});

您可以使用正则表达式测试输入的值,查看它是否以空格开头,如果是,则从值的开头删除空格

var input = document.getElementById('noSpaces');

input.addEventListener('keyup', function(event) {
   if(/^\s/.test(input.value)) {
     input.value = input.value.replace(/^\s+/,'');   
   }
});

返回真/假是管理事件传播的“老”方法。现在最好使用
preventDefault()

这只是检查。。。如果当前输入长度为零,则不允许有空格

另请参阅

如果这确实是一个问题,您还可以添加/修改以检查不间断空格——与Dave的答案一样匹配正则表达式,但前提是
elmt.value.length
>0

但是,这将允许您键入非空格,然后备份到字段开头并插入空格。
当你打字时,一个空格会修剪前导空格,但这也不能完全解决问题

var elmt = document.getElementById('noSpaces');

elmt.addEventListener('keydown', function (event) {
    if (event.which === 32) {
        elmt.value = elmt.value.replace(/^\s+/, '');
        if (elmt.value.length === 0) {
            event.preventDefault();
        }
    }
});

即使考虑到当前插入符号的位置和当前选定的文本,您也可以不断优化它,但最终您必须在服务器上接收到的字符串
.trim()
,因为我(作为一个人)可以向您发送任何我想发送的内容,尽管您竭尽全力让我输入“合法”的javascript字符串。

返回true/false是管理事件传播的“老”方法。现在最好使用
preventDefault()

这只是检查。。。如果当前输入长度为零,则不允许有空格

另请参阅

如果这确实是一个问题,您还可以添加/修改以检查不间断空格——与Dave的答案一样匹配正则表达式,但前提是
elmt.value.length
>0

但是,这将允许您键入非空格,然后备份到字段开头并插入空格。
当你打字时,一个空格会修剪前导空格,但这也不能完全解决问题

var elmt = document.getElementById('noSpaces');

elmt.addEventListener('keydown', function (event) {
    if (event.which === 32) {
        elmt.value = elmt.value.replace(/^\s+/, '');
        if (elmt.value.length === 0) {
            event.preventDefault();
        }
    }
});

即使考虑到当前插入符号的位置和当前选定的文本,您也可以不断优化它,但最终您必须在服务器上接收到的字符串
.trim()
,因为我(作为一个人)可以向您发送任何我想发送的内容,尽管您竭尽全力让我输入“合法”的javascript字符串。

多亏@StephenP,我得出了这个最终答案,它正好满足了我的需要(“访问者姓名”字段):


/*给定元素ID([eID]),不允许“基于文本”输入元素(例如文本框、文本区域、可编辑div等)的第一个字符为空格。另外,相邻单词之间的空格不能超过一个。[开始]*/
/*用法示例:NoReceidingOrdoubleSpace(“访问者名称”)*/
函数NoReceidingOrdoubleSpace(eID)
{
var elmt=document.getElementById(eID);
elmt.addEventListener(“键控”,函数(事件)
{ 
var strg=elmt.值;
var lastChar=strg.charAt(strg.length-1);
如果((lastChar==“”)| |(lastChar==“”)| |(strg==“”)
{
if(event.which==32)
{
event.preventDefault();
};
};
});
};
/*给定元素ID([eID]),不允许“基于文本”输入元素(例如文本框、文本区域、可编辑div等)的第一个字符为空格。另外,相邻单词之间的空格不能超过一个。[完]*/
请记住,如果您不需要空间,只需要在输入的开头,@StephenP的答案可能更实用,并且是这个问题的真正答案,给出了标题

还请记住,正如@StephenP所提到的,真正的验证最好在服务器端脚本(例如php)中完成。这个JavaScript只是为了鼓励正确的输入格式。不多不少

对@StephenP的巨大赞誉

谢谢


.

多亏了@StephenP,我才得出了这个最终答案,它正好满足了我的需求(“访问者姓名”字段):


/*给定元素ID([eID]),不允许“基于文本”输入元素(例如文本框、文本区域、可编辑div等)的第一个字符为空格。另外,相邻单词之间的空格不能超过一个。[开始]*/
/*用法示例:NoReceidingOrdoubleSpace(“访问者名称”)*/
函数NoReceidingOrdoubleSpace(eID)
{
var elmt=document.getElementById(eID);
elmt.addEventListener(“键控”,函数(事件)
{ 
var strg=elmt.值;
var lastChar=strg.charAt(strg.length-1);
如果((lastChar==“”)| |(lastChar==“”)| |(strg==“”)
{
if(event.which==32)
{
event.preventDefault();
};
};
});
};
/*不要