답변:
당신이 이미하고 싶은 것을 거의 알고있는 것처럼 들리 겠지만 기본적으로 정규식으로 정의했습니다.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
유니 코드 문자의 경우 다음과 같습니다.
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
\w
포함 \d
등 \d
이 불필요합니다. 또한 결과 문자열에 밑줄을 남기기 때문에 잘못되었습니다 (또한 포함 \w
).
i
플래그는 이후 여기에 정말 필요한 [:alnum:]
이미 두 경우 모두를 포함?
정규식 이 답입니다.
$str = preg_replace('/[^a-z\d ]/i', '', $str);
i
경우를 구분을 의미합니다.^
의미로 시작하지 않습니다. \d
모든 숫자와 일치합니다. a-z
사이의 모든 문자와 일치 a
하고 z
. i
매개 변수 때문에 a-z
및 을 지정할 필요가 없습니다 A-Z
.\d
이 공간이기 때문에 공간이 정규식에 사용할 수 있습니다.여기에 대한 간단한 정규식이 있습니다.
\W|_
필요에 따라 사용됩니다 ( /
슬래시 구분 기호 사용).
preg_replace("/\W|_/", '', $string);
정규식이하는 일을 설명하는이 훌륭한 도구로 여기에서 테스트하십시오.
/u
플래그 가 필요합니다. 그렇지 않으면 ASCII가 아닌 문자도 제거됩니다.
[\W_]+
일반적인 AZ 대신 다른 언어를 지원해야하는 경우 다음을 사용할 수 있습니다.
preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
[^\p{L}\p{N} ]
정의 부정은 (그것이 문자 일치 하지 의 문자 클래스 정의를)
\p{L}
: 모든 언어 의 편지 .\p{N}
: 모든 스크립트 의 숫자 입니다.
: 공백 문자.+
탐욕스럽게 캐릭터 클래스를 1에서 무제한으로 일치시킵니다 .이렇게하면 AZ뿐만 아니라 다른 언어와 스크립트의 문자와 숫자가 보존됩니다.
preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
참고 : 이것은 매우 오래되었지만 여전히 관련이있는 질문입니다. 앞으로 방문자에게 도움이 될만한 보충 정보를 제공 할 것입니다.
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
AZ, az, 0-9가 아닌 모든 항목을 선택하고 삭제합니다.
https://regexr.com/3h1rj 예를 참조 하십시오
\W
\w
문자 의 반대입니다 A-Za-z0-9_
. 따라서 \W
다른 문자와 일치 A-Za-z0-9_
하고 제거합니다. 는 []
A는 문자 집합 경계 . 는 +
문자 집합 경계에 중복이지만 일반적으로 1 개 이상의 문자를 의미합니다. u
플래그는 같은 문자 코드 255을 넘어 문자를 제거하지 않습니다 의미, 유니 코드 문자 지원을 포함하는 표현을 확장 ª²³µ
. 유니 코드 및 ASCII 문자를 사용한 다양한 사용법 3v4l.org/hSVV5의 예 .
preg_replace("/\W+/", '', $string)
여기에서 테스트 할 수 있습니다 : http://regexr.com/
문자열을 문자로 나누고 필터링 할 수 있습니다.
<?php
function filter_alphanum($string) {
$characters = str_split($string);
$alphaNumeric = array_filter($characters,"ctype_alnum");
return join($alphaNumeric);
}
$res = filter_alphanum("a!bc!#123");
print_r($res); // abc123
?>
preg_replace()
호출 하면 단일 및 단순 호출에 비해 실제로 매력적이지 않은 것으로 보입니다 .