在交互方面,不要允许文本输入中的第一个字符是一个空格或一组空格
Interactively, don't allow the first character in a text input to be a space, or group of spaces
首先,这不是一个重复问题。我遇到的大多数类似的问题,都没有交互式地执行期望的动作(例如:"onkeydown", "onkeyup"等)。我需要一个纯JavaScript(即NO 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 == " ")||(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>
有什么想法,为什么这是不工作?
我做错了什么?
请注意:"粘贴"已经被考虑在内,并且被另一个javascript禁止在字段上,顺便说一下,它工作得很好。
JSFiddle
返回true/false是管理事件传播的"老"方法。现在最好使用preventDefault()
var elmt = document.getElementById('noSpaces');
elmt.addEventListener('keydown', function (event) {
if (elmt.value.length === 0 && event.which === 32) {
event.preventDefault();
}
});
这只是检查…如果当前输入长度为零,则不允许使用空格。
另见小提琴
你也可以添加/修改来检查非换行空格,如果这真的是一个问题——匹配像Dave的答案一样的正则表达式,但只有当elmt.value.length
是> 0
但是,这将允许您键入非空格,然后将备份到字段的开头并插入空格。
修改后的fiddle会在您输入时修剪前导空格,但这也不能完全解决问题。
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努力让我输入一个"合法"字符串。
您可以使用正则表达式测试输入的值,看看它是否以空格开头,如果是,则从值的开头删除空格;
var input = document.getElementById('noSpaces');
input.addEventListener('keyup', function(event) {
if(/^'s/.test(input.value)) {
input.value = input.value.replace(/^'s+/,'');
}
});
JSFiddle
感谢@StephenP,我想出了这个最终的答案,这正好符合我的需求("visitors_name"字段):
<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, etc.) to be a space, given the elements ID ([ eID ]). Also, don't allow more than one space between adjacent words. [BEGIN] */
/* Usage Example: noPrecedingOrDoubleSpace ("visitors_name"); */
function noPrecedingOrDoubleSpace ( 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 == " ")||(strg == ""))
{
if (event.which === 32)
{
event.preventDefault();
};
};
});
};
/* Don't allow the first character of a "text-based" input element (e.g. text-box, text-area, editable-div's, etc.) to be a space, given the elements ID ([ eID ]). Also, don't allow more than one space between adjacent words. [END] */
</script>
请记住,如果你只是不需要空格,只需要在开头的输入,@StephenP的答案可能更实用,并且是真正的回答这个问题,给定的标题。
还要记住,正如@StephenP提到的,真正的验证最好在服务器端脚本(例如php)中完成。这个JavaScript只是为了鼓励正确的输入格式。不多不少。
向@StephenP致敬
谢谢!
最终JSFiddle。
- 仅当后面跟着字母表时才允许使用空格字符的验证
- 从 JavaScript 字符串中删除零宽度空格字符
- 正则表达式匹配非空格字符
- JSON 数据后出现意外的非空格字符
- JavaScript中(字符空间字符)或(空格字符空格)的表达式是什么
- /(S)1(1)+/g 匹配三个相等的非空格字符紧随其后的所有匹配项
- Javascript RegExp:如何检测空格字符
- 在预标记中显示空格字符
- 检查数组中的字符串在javascript/jquery中是否有空格字符
- JavaScript初学者:在函数中编码单独的空格字符有什么功能区别
- 在javascript和crossfilter中使用空格字符
- 获取第一个空格字符和'='性格
- 在JavaScript中,当使用Regex时,如何在不使用空格字符ORs的情况下匹配空格
- 使用jQuery将cookie值替换为空格字符
- Javascript regex:查找一个没有后跟空格字符的单词
- Regex检查重复的空格字符
- 如何检查输入是否只包含空格字符?即只有一个或多个空格,而没有其他字符
- 替换unicode空格字符
- 在regex - Javascript中,在匹配空格字符之前先匹配字母
- 我如何添加空格字符的文本在jquery追加