[php] 영숫자가 아닌 문자를 제거하는 방법?
a-z A-Z 0-9
세트에 없거나 공백 이 아닌 문자열에서 모든 문자를 제거해야 합니다.
누구든지 이것을 할 수있는 기능이 있습니까?
답변
당신이 이미하고 싶은 것을 거의 알고있는 것처럼 들리 겠지만 기본적으로 정규식으로 정의했습니다.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
답변
유니 코드 문자의 경우 다음과 같습니다.
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
답변
정규식 이 답입니다.
$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);
정규식이하는 일을 설명하는이 훌륭한 도구로 여기에서 테스트하십시오.
답변
일반적인 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 예를 참조 하십시오