문제

내가 쓰려고 합리적으로 허가하는 유효성 검사에 대한 이름 PHP,첫 시도로 구성되어 있 다음과 같은 패턴:

// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";

이것은 결국에 전달되는 통화 preg_match().멀리로 말할 수 있는,이와 함께 작동하고 바닐라 ASCII 알파벳을 여행에 매운 캐릭터 같은 Ă 또는 张.

무언가 잘못으로 패턴을까요?아마도 내가 기대 \p{L} 을 보다 더 많은 일을 생각합니까?

또는 그것을 할 수있는 뭔가가있는 방법 입력 전달되는가?나는 확실하지 않다면 그것은 타당하지만,나는 않았는지 확인을 지정하 UTF8 인코딩에 양식 페이지를 제공합니다.

도움이 되었습니까?

해결책

문제가 그보다 훨씬 간단하다고 생각합니다. u 수정자를 지정하는 것을 잊었습니다..유니 코드 문자 속성은 UTF-8 모드에서만 사용할 수 있습니다 .

정규식은 다음과 같아야합니다 :

// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';
.

다른 팁

대체하려는 경우 유니코드 old patternnew pattern 를 작성해야 합:

$text = preg_replace('/\bold pattern\b/u', 'new pattern', $text);

그래서 여기에 열쇠 u 수정자

참고 :귀하의 서버 php version 갈까요 적어도 PHP 4.3.5

여기서 설명 php.net |패턴 수정

u(PCRE_UTF8) 이 수집에 추가적인 기능의 PCRE 와 호환되지 않는 Perl.패턴 문자열로 처리됩니다 UTF-8 입니다.이 정에서 사용할 수 있 PHP4.1.0 대 또는 유닉스와에서 PHP 4.2.3on win32.UTF-8 의 유효성 패턴은 체크 PHP4.3.5.

감사 AgreeOrNot 누가 나에게는 여기에 열쇠 독의 영화"꿈"의 무대가 된 곳 전체 경기에서 단어 아랍어

나는 그것을 시도하고 웹브라우저에서 주소를 입력하 localhost 지하려고 할 때 그것은 원격지에서 서버 작동하지 않았다,그 후에 내가 발견 php.net 시작 사용 u 수정자 PHP4.3.5.,업그레이드 php 버전 그리고 작동

그것의 중요한 알고 있는 이 방법은 매우 도움이 된 아랍어에 대한 사용자는(عربي)므로 나는 믿-유니코드는 최고의 인코딩 아랍어,교체 작동하지 않습니다하지 않는 경우 사용 u 수정,다음 예제와 함께 작동해야한다는 당신

$text = preg_replace('/\bمرحبا بك\b/u', 'NEW', $text);

우선 이들을 쓸 때 큰 따옴표 대신 단일 아포스트로피를 사용하는 경우 훨씬 쉽습니다 - 당신은 하나의 백 슬래시 만 필요합니다. 둘째, 결합 마크 \pM도 포함되어야합니다. 일치하지 않는 문자를 찾으면 유니 코드 코드 지점을 찾아 http : // www를 사용할 수 있습니다 .fileformat.info / info / 유니 코드 / 가 어디에 있는지 알아낼 수 있습니다. "Nofollow"> http://hsivonen.iki.fi/php-utf8/ invaluabable 도구를 발견했습니다. UTF-8 속성을 사용하여 디버깅을 수행합니다 (Look-up을 찾으려고하기 전에 16 진수로 변환하는 것을 잊지 마십시오.).

예를 들어, ¡ http : // www. fileformat.info/info/unicode/char/0102/index.htm in lu in with in with in with with in with. 다른 캐릭터는 http:///www.fileformat.info/info/unicode. /Char/5F20/Index.htm isletter이며 실제로 나에게 일치합니다. 유니 코드 문자 테이블이 컴파일되어 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top