0

我有以下脚本

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 转到下一行后,如果我没有在下一行输入任何值并按 Enter,我应该收到消息“请输入域名,但没有发生。请当我错的时候纠正我我认为我在这里错了:

if (e.which == 13) {
  if (!/\S/.test(val)) {

演示http://jsfiddle.net/zBkXw/6/

4

3 回答 3

2

尝试更改!/\S/.test(val)/^\s*$/m.test(val).

示例:http: //jsfiddle.net/pQ9wP/

说明:/^\s*$/m是一个正则表达式,如果在字符串中的任何位置有一行只包含空格,它将匹配。( mmultiline) 标志使它^在字符串的开头或换行符之后$匹配,并且标志将在字符串的末尾或换行符之前匹配。

于 2013-11-06T16:57:28.283 回答
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 并根据正则表达式评估每一行(尽管也可以像 FJ 试图做的那样使用单个多行正则表达式来做到这一点,但他的答案对我不起作用)

于 2013-11-06T16:55:48.110 回答
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
}
于 2013-11-06T16:57:44.763 回答