0

これは私がこれまでやってきたことです。

$('.name').keyup(function () {
    var $th = $(this);
    $th.val($th.val().replace(/[^a-zA-Z' ]+( [A-Za-z' ]+)*$/g, function (str) {
        return '';
    }));
});

上記の式では、AZ と ' とスペースを入力できます。しかし、文字や単語の後にスペースを 1 つだけ入れたいのです。

Ex. Hello World is ok
but Hello  World should not be accepted.

JSFIDDLE

4

5 に答える 5

3

シンプルなアプローチの方が良いかもしれません。繰り返されるスペースを単一のスペースに置き換えるだけです:

.replace(/\s+/, ' ')
于 2013-08-05T18:29:07.470 に答える
1

または、繰り返されるスペースを単純に置き換えることもできます。

str.replace(/[ ]{2,}/, ' ');
于 2013-08-05T18:28:35.157 に答える
0

最も内側のコード部分で、「replace(/[^a-zA-Z' ]+( [A-Za-z' ]+)」を「replace(/[^a-zA-Z' ]+)」に置き換えてみてください( [A-Za-z']+)"

この投稿からこのヒントを得ました:文字または単語の後に単一のスペースを許可する正規表現なので、それも読みたいと思うかもしれません。

于 2013-08-05T18:29:28.097 に答える
0

これを試して:

$('.name').keyup(function() {
    var $th = $(this);
    $th.val($th.val().replace(/(\s{2,})|[^a-zA-Z']/g, ' '));
    $th.val($th.val().replace(/^\s*/, ''));
    });

フィドル

于 2013-08-05T18:30:11.443 に答える
0

ブラケットの最後のスペースを削除するだけです。

[^a-zA-Z']+( [A-Za-z']+)

ただし、実際にリアルタイムで入力できるように、最初の単語の最後にスペースを入れることを検討します.

$('.name').keyup(function() {
        var $th = $(this);
        $th.val( $th.val().replace(/([^a-zA-Z'] )+([A-Za-z']+)*$/g, function(str) {  return ''; } ) );
    });
于 2013-08-05T18:30:20.110 に答える