我有以下脚本
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>
当我没有输入任何值时,它会起作用并回显我一条消息,但是如果我输入一个值,然后再次按 Enter 转到下一行并在第二行上留出空间,它将不再验证。示例:我输入值 123,在我按 Enter 转到下一行后,如果我没有在下一行输入任何值并按回车键,我应该会收到消息"请输入域名,但没有发生。当我错了时,请纠正我。我假设我在这里有些错误:
if (e.which == 13) {
if (!/S/.test(val)) {
演示 http://jsfiddle.net/zBkXw/6/
尝试将!/S/.test(val)
更改为 /^s*$/m.test(val)
。
示例:http://jsfiddle.net/pQ9wP/
说明:/^s*$/m
是一个正则表达式,如果字符串中任何位置的行仅包含空格,则该表达式将匹配。 m
(多行)标志使^
在字符串开头或换行符之后匹配,$
标志将在字符串末尾或换行符之前匹配。
试试这个 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
}
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 尝试的那样使用单个多行正则表达式来做到这一点,但他的答案对我不起作用)