Javascript正则表达式应该允许空和非空字符串,但它不会

时间:2011-12-01 08:43:23

标签: javascript regex

我是一个允许字符串为空的正则表达式。如果它不是空的,则字符串可能只包含字母和空格。但它可能无法以空格开始或结束。

这个RegExp应该做这个工作: ^(?! )[a-zA-Z]*[a-zA-Z ]*$ 我在这里测试了它:http://tools.netshiftmedia.com/regexlibrary/

但是当我在我的js中实现它时,它不允许字符串为空。

这是代码

function validatePreposition(name) {
    string = string = document.forms['form'][name].value;
    pattern = new RegExp('^(?! )[a-zA-Z]*[a-zA-Z ]*$');

    checkString(name, pattern, string);
}

function checkString(name, pattern, string) {

    if(!pattern.test(string)) {
        error[name] = 1;
    } else {
        error[name] = 0;
    }

    printErrors();
}

如何更改我的代码以便允许空字符串?

2 个答案:

答案 0 :(得分:14)

请尝试使用此代码:

pattern = /(^[a-zA-Z]+(\s*[a-zA-Z]+)*$)|(^$)/;

它将测试空字符串或测试以a-Z开头的字符串,并且字符串中可能包含无限量的空格但必须以a-Z结尾。

您可以在此处看到它:http://jsfiddle.net/BAXya/

答案 1 :(得分:0)

还可以使用:

if (subject.match(/^(?=[a-z ]*$)(?=\S)(?=.*\S$)/i)) {
    // Successful match
}

仅使用前瞻。虽然我会跟@Marcus一起回答。