【发布时间】:2019-04-20 21:32:55
【问题描述】:
我正在尝试在用户写入时执行验证,以便输入只接受大写和小写字母、数字和单词之间的单个空格。输入文本也不应该以空格开头或结尾。
这是我的代码:
$(function() {
$('#input-tags').on('keypress', function(e) {
// Get tag value from input
let tag = $(this).val();
// Pattern for ignore special characters
let actualChar = String.fromCharCode(e.keyCode);
let dontHaveSpecial = /^[A-Za-z0-9]*[ ]?[A-Za-z0-9]*$/.test(actualChar); //return true if not exists special chars, else false
if (e.keyCode === 13) {
dontHaveSpecial = true;
} // 13 is enter
if (e.keyCode === 9) {
dontHaveSpecial = true;
} // 9 is tab
if (e.keyCode === 32) {
dontHaveSpecial = true;
} // 32 is space
if (tag.startsWith(' ') || tag.endsWith(' ')) {
tag = tag.trim();
} //Tag starts or ends with space
//Check spaces count
let spacesCount = [...tag].filter(s => s === ' ').length;
if (spacesCount > 1) {
//Remove extra spaces
let spaceIndex = tag.indexOf(' ');
let newTag = tag.substring(spaceIndex + 1).trim();
$(this).val(newTag);
}
// Prevent input if have special
return dontHaveSpecial;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="input-tags">
但它不能正常工作,因为它允许多个空格,并且当我要删除多余的空格时,它还会删除字母和数字。
【问题讨论】:
-
对
^[A-Za-z0-9]+(?: [A-Za-z0-9]+)*$的测试还不够吗? -
您仅针对正在输入的字符测试您的正则表达式。不是整个字符串。
-
您的问题是关于验证,但代码是关于transform。你到底想要什么?
标签: javascript html regex input