2011-12-01 84 views
4

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

这个正则表达式应该做好这项工作: ^(?!)[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(); 
} 

如何更改我的代码,这样一个空字符串被允许?

+0

什么是“(?!)”? – jergason

+2

@Jergason负面看法:http://www.regular-expressions.info/lookaround.html – Marcus

+1

我不确定你的意思; '/ ^(?!)[a-zA-Z] * [a-zA-Z] * $ /。test(“”)=== true'。 – pimvdb

回答

14

尝试使用这个:

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

它要么测试空字符串或测试与一个AZ开始,可能有串在空间无限量的,但是有AZ结束的字符串。

你可以看到它在这里的行动:http://jsfiddle.net/BAXya/

+0

谢谢,这解决了我的问题。 – OrangeTux

+0

@OrangeTux不客气:)不要忘记将其标记为已接受的答案,方法是单击此答案左侧的复选框大纲 – Marcus

0

也可以使用这样的:

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

只使用向前看符号。虽然我会与@马库斯答案。

相关问题