Javascript正则表达式空格检查

时间:2012-07-29 23:46:18

标签: javascript regex

我有一个问题,我似乎无法自己解决。
假设我要验证用户的名字。有些可以包含多个部分,如“John William”,其间有空格。我想要做的是将输入与正则表达式匹配,该正则表达式寻找名称在开头或结尾处是否包含任何空格。
此外,正则表达式应该检查名称中是否只有字母(a-z,小写和大写)。

这是我到目前为止所提出的:

/^\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);

2 个答案:

答案 0 :(得分: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)',
        });
    }

答案 1 :(得分: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个)或英文字母以外的字母。所以通常你让用户输入他们想要的东西,然后处理空格。