0

这是我到目前为止所做的,

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

上面的表达式允许我输入 AZ 和 ' 和空格。但我只想要一个字符或单词后的空格。

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' ]+”替换“replace(/[^a-zA-Z' ]+( [A-Za-z' ]+)” ([A-Za-z']+)"

我从这篇文章中得到了这个提示:Regular expression to allow single space after character or word so you may want to read that.

于 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 回答