[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);

정규식이하는 일을 설명하는이 훌륭한 도구로 여기에서 테스트하십시오.

http://www.regexr.com/


답변

일반적인 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 예를 참조 하십시오


답변

preg_replace("/\W+/", '', $string)

여기에서 테스트 할 수 있습니다 : http://regexr.com/