我有以下脚本
document.getElementById('url').onkeypress = function (e) {
var val = this.value;
var validaterror = document.getElementById('errorvalidate');
if (e.which == 13) {
if (!/\S/.test(val)) {
validaterror.innerHTML = 'Please enter domain names in the field.';
return false;
}
validaterror.innerHTML = '';
}
}
HTML
<textarea id="url"></textarea>
当我没有输入任何值时,它将起作用并向我回复一条消息,但是如果我输入一个值并且在该命中后再次输入以进入下一行并在第二行留下空间它赢了再验证一下。示例:我输入值123,在我按Enter键进入下一行后如果我没有在下一行输入任何值并点击回车我应该收到消息“请输入域名,但不会发生。请当我错的时候纠正我。我认为我在某些地方错了:
if (e.which == 13) {
if (!/\S/.test(val)) {
答案 0 :(得分:2)
尝试将!/\S/.test(val)
更改为/^\s*$/m.test(val)
。
说明:/^\s*$/m
是一个正则表达式,如果有一行只包含字符串中的任何空格,则该表达式将匹配。 m
(多行)标志使^
将在字符串的开头或换行符后匹配,$
标志将在字符串的末尾匹配或者在换行前。
答案 1 :(得分:1)
document.getElementById('url').onkeypress = function (e) {
var val = this.value.split('\n');
var validaterror = document.getElementById('errorvalidate');
var i;
if (e.which == 13) {
for (i = 0 ; i < val.length ; i++) {
if (/\s/.test(val[i])) {
validaterror.innerHTML = 'Please enter domain names in the field.';
return false;
}
}
validaterror.innerHTML = '';
}
}
我做了什么:
将!/\S/.test
更改为/\s/.test
在新行字符上拆分val并根据正则表达式评估每一行(虽然也可以使用像F.J那样的单行多行正则表达式,但他的答案对我不起作用)
答案 2 :(得分:1)
试试这个http://jsfiddle.net/zBkXw/7/它应该运行得很好。
var oldkey = null;
document.getElementById('url').onkeypress = function (e) {
var val = this.value;
var validaterror = document.getElementById('errorvalidate');
if (e.which == 13) {
if (!/\S/.test(val) || oldkey == e.which) {
validaterror.innerHTML = 'Please enter domain names in the field.';
return false;
}
validaterror.innerHTML = '';
}
oldkey = e.which
}