입력 문자열을 가져와 영숫자 만 남기고 모든 특수 문자를 제거하여 위생 화 된 버전을 반환하는 PHP 함수를 찾고 있습니다.
동일한 작업을 수행하지만 알파벳 문자 AZ 만 반환하는 두 번째 함수가 필요합니다.
많은 도움을 주셔서 감사합니다.
입력 문자열을 가져와 영숫자 만 남기고 모든 특수 문자를 제거하여 위생 화 된 버전을 반환하는 PHP 함수를 찾고 있습니다.
동일한 작업을 수행하지만 알파벳 문자 AZ 만 반환하는 두 번째 함수가 필요합니다.
많은 도움을 주셔서 감사합니다.
unichars '\p{Latin}' '\p{Alphabetic}' '[^A-Za-z]' | wc -l
라틴어 영문자하지만 AZ 없습니다 == 1192 코드 포인트. 일반적으로 ASCII가 영어로 충분하다는 신화가 있습니다. 그렇지 않습니다. 그래서 AZ를 작성하면 코드 냄새 가 납니다 .
답변:
경고 : 영어는 AZ에만 국한되지 않습니다.
az, AZ 및 0-9를 제외한 모든 항목을 제거하려면 다음 을 시도하십시오 .
$result = preg_replace("/[^a-zA-Z0-9]+/", "", $s);
영숫자 정의에 외국어 문자와 쓸모없는 스크립트가 포함 된 경우 유니 코드 문자 클래스를 사용해야합니다.
AZ 만 남겨 두려면 다음 을 시도하십시오 .
$result = preg_replace("/[^A-Z]+/", "", $s);
경고의 이유는 이력서와 같은 단어 é
에 이것과 일치하지 않는 문자 가 포함되어 있기 때문입니다. 특정 문자 목록과 일치 시키려면 해당 문자를 포함하도록 정규식을 조정하십시오. 모든 문자를 일치 시키려면 주석에 언급 된 적절한 문자 클래스를 사용하십시오.
[\p{Alphabetic}\p{Numeric}]
입니다. PCRE 알파벳 속성을 잊어 버렸지 만 [\pL\pM\pN]
.
[A-Z]
이 항상 틀렸다는
i
하지만 영어 인구 통계에 대해서만 걱정할 필요가 있습니다. .. 많은 사람들이 다른 언어에 대해 생각해야한다는 것을 잊었습니다. BTW 방금 당신이 한 번도 질문을 한 적이없는 최고 응답 사용자라는 것을 알아 챘습니다. 심지어 Jon Skeet도 전에 질문을했습니다!
대신 .NET 과 함께 함수를 사용하여 preg_replace
항상 PHP의 필터 함수 를 사용할 수 있습니다 .filter_var()
FILTER_SANITIZE_STRING
FILTER_SANITIZE_STRING
시겠습니까? 내가 아는 한, 이런 방식으로 보관할 수있는 가장 가까운 것은를 사용하는 FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH
것이지만 문자와 숫자뿐만 아니라 점, 슬래시, 퍼센트 등도 남기지 않습니다.