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

Javascript正则表达式应该允许空字符串和非空字符串,但它不允许';T,javascript,regex,Javascript,Regex,我有一个正则表达式,它允许字符串为空。如果它不是空的,字符串可能只包含字母和空格。但它可能不会以空格开始或结束 此RegExp应执行以下操作: ^(?![a-zA-Z]*[a-zA-Z]*$ 我在这里测试过: 但是,当我在js中实现这一点时,它不允许字符串为空 这是密码 function validatePreposition(name) { string = string = document.forms['form'][name].value; pattern = new R

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

此RegExp应执行以下操作:
^(?![a-zA-Z]*[a-zA-Z]*$
我在这里测试过:

但是,当我在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();
}

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

尝试使用此选项:

pattern = /(^[a-zA-Z]+(\s*[a-zA-Z]+)*$)|(^$)/;
它将测试一个空字符串,或者测试一个以a-Z开头的字符串,该字符串中可能有无限多的空格,但必须以a-Z结尾

你可以在这里看到它的作用:

也可以使用它:

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

只使用lookaheads。尽管我会选择@Marcus answer

什么是
(?!)
?@Jergason消极前瞻:我不知道你的意思<代码>/^(?![a-zA-Z]*[a-zA-Z]*$/.test(“”===true@OrangeTux不客气:)不要忘了单击此答案左侧的复选框轮廓,将其标记为已接受的答案