1

自分では理解できないようですが、質問があります。
ユーザーの名を検証したいとします。「ジョン・ウィリアム」のように、間にスペースを入れて複数のパーツを含めることができるものもあります。私がやりたいのは、名前の最初または最後にスペースが含まれているかどうかを調べる正規表現に入力を一致させることです。
さらに、正規表現では、名前に文字(az、小文字と大文字の両方)のみが含まれているかどうかを確認する必要があります。

これは私がこれまでに思いついたものです:

/^\s+[A-z]+|[A-z]+\s+$/

しかし、どういうわけか、この正規表現は他の文字(ダッシュ、アンダースコア、アンパサンドなど)を認識しません。基本的には、入力の最初と最後のどちらにスペースがあるかを教えてくれます。

誰かがここで私を助けることができますか?

編集:

これが私が使用している完全なコードです:

$(document).ready(function() {
    $('#firstname, #lastname').bind('keyup blur', function() {
        var _input = $(this);
        var _illegal = Validate_Regexp(_input.val(), /^\s+[A-Za-z]+|[A-Za-z]+\s+$/);
        if (_illegal == true) {
            $("#"+_input.attr('id')+".validator").css({
                'background-image' : 'url(./images/icons/bullet_red.png)',
            });
        } else {
            $("#"+_input.attr('id')+".validator").css({
                'background-image' : 'url(./images/icons/bullet_green.png)',
            });
        }
    });
});

function Validate_Regexp($value, $regexp) {
    return $regexp.test($value);
}

編集2:

私はチャーリーの答えで行きます、しかし彼の答えは私が望むだけではなく、名前の2つの部分を持つことを私に強制しました。
コードを次のように変更しました:

var isLegal = /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test(stringToTest);

に:

var isLegal = /^[a-zA-Z]+(\s[a-zA-Z]+)*?$/.test(stringToTest);
4

2 に答える 2

2

違法な文字列をチェックしていることに気づきました。それを裏返して、有効な文字列を確認しましょう。

 var isValid = /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test(stringToTest);

結果:

 /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test("john doe"); // true
 /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test("john"); // true

 /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test("john d_oe"); // false
 /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test(" john doe "); // false
 /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test(" john doe"); // false
 /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test("john doe "); // false
 /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test("john "); // false

既存のコードに翻訳:

    var isValid = Validate_Regexp(_input.val(), /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/);
    if (isValid) {
        $("#"+_input.attr('id')+".validator").css({
            'background-image' : 'url(./images/icons/bullet_blue.png)',
        });
    } else {
        $("#"+_input.attr('id')+".validator").css({
            'background-image' : 'url(./images/icons/bullet_red.png)',
        });
    }
于 2012-07-29T23:52:52.400 に答える
0

先頭または末尾のスペースがあるかどうか、または名前の間にいくつあるかは本当に気にしません。これらはすべて、ユーザーを煩わせることなく非常に簡単に管理できます。

したがって、適切な関数は次のようになります。

function checkNames(s) {
  // Remove excess spaces
  s.replace(/(^\s*)|(\s*$)/g, '').replace(/\s+/g, ' ');

  // Check remaining content
  return /[a-z]+ [a-z]+/i.test(s);
}

ただし、名前にはハイフンを付けて、数字(William Gates 3番目など)または英語のアルファベット以外の文字を含めることができることに注意してください。したがって、通常は、ユーザーが好きなように入力して、スペースだけを処理できるようにします。

于 2012-07-30T02:57:54.480 に答える