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>

値が入力されていない場合は機能し、メッセージがエコーされますが、値を入力してからもう一度Enterキーを押して次の行に移動し、2行目にスペースを残すと、もう検証されません. 例: 値 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文字列のどこかに空白のみを含む行がある場合に一致する正規表現です。(m複数行) フラグは^、文字列の先頭または改行の直後に$一致し、フラグが文字列の末尾または改行の直前に一致するようにします。

于 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 に答える