2011-12-01 2 views
4

문자열을 비워 둘 수있는 정규식이 있습니다. 비어 있지 않은 경우 문자열에는 문자와 공백 만 포함될 수 있습니다. 그러나 공간으로 시작하거나 끝나지 않을 수도 있습니다. ^(?!)[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 부정적인 lookahead : 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 
} 

만 lookaheads 사용. 나는 마커스의 대답으로 갈 것이지만.

관련 문제