2010-11-19 7 views
0

나는 모든 대문자를 검사 할 PHP에서 정규 표현식을 원한다.모든 대문자를 검사하는 Regex

숫자 및 기타 문자와 상관없이 주어진 문자열에 대문자가 모두 포함되어 있으면 일치해야합니다. 이 아마도 같은

+0

이 ASCII 텍스트 또는 UTF-8 텍스트입니까? – tchrist

답변

1

뭔가 :

'/^[^a-z]*$/' 

비결은 독점 문자 클래스를 사용하는 것입니다 :이 하나가되지 소문자 모든 문자와 일치합니다. 악센트 부호가있는 문자는 확인되지 않습니다.

3

다른 문자도 일치 시키므로 대문자 대신 소문자를 찾으십시오. 발견되면 false를 반환합니다. (. 또는 부정 문자 클래스의 tdammers' suggestion 사용)

return !preg_match('/[a-z]/', $str); 

또한 정규식을 건너 뛰고 원래의 문자열로 strtoupper($str)을 비교할 수 있습니다, 이것은 그대로 숫자와 기호를 잎 :

return strtoupper($str) == $str; 

모두하지 않습니다 멀티 바이트 문자열 계정; 이를 위해 u 수정자를 정규식에 추가하고 mb_strtoupper()을 각각 사용해 볼 수 있습니다 (테스트하지 않았으므로 유니 코드를 더 잘 알고있는 사람이이를 확인할 수 있습니까?).

+0

non-regex 솔루션을위한 +1 – teukkam

+0

+1 strtoupper ($ str) == $ str' – jensgram

3
if (preg_match('/^[^\p{Ll}]*$/u', $subject)) { 
    # String doesn't contain any lowercase characters 
} else { 
    # String contains at least one lowercase characters 
} 

\p{Ll}은 유니 코드 소문자와 일치합니다. 따라서 [^\p{Ll}]은 소문자가 아닌 문자와 일치합니다.

+0

Tim은 '[a-z]'를 나머지 코드처럼 하드 코딩하는 대신 잘 처리합니다. – tchrist

+0

@tchrist : 글쎄, 누가 최근에 이것을 생각 나게했는지 알 수 있습니다. :) –

+0

일하면서 일주일에 여러 번 유니 코드와 관련된 다른 사람들의 프로그래밍 오류, 보통 regexes 나 I/O 인코딩을 다루어야했기 때문입니다. 태워진 아이는 두려워합니다. – tchrist