2011-12-01 85 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 
} 

只使用向前看符號。雖然我會與@馬庫斯答案。

相關問題