2011-09-25 4 views
2

먼저 태그에서 명확하지 않으면 PHP에서이 작업을 수행합니다.하지만 그다지 중요하지 않습니다. 완벽하게 모든 HTML 태그와 거의 모든 특별하고 알파벳이 아닌 문자를 제거하는 것정규식 - 모든 영숫자가 아닌 문자 제거 CRLF 문제

$inputStr = strip_tags($inputStr); 
$inputStr = preg_replace("/[^a-zA-Z\s]/", " ", $inputStr); 

:

나는이 코드를 가지고있다. 한 가지 문제는 어떤 이유로 든 카라지 리턴/라인 피드를 필터링하지 않는다는 것입니다 (조합 만). 나는이 라인을 추가하면

: 결국에

$inputStr = preg_replace("/\s+/", " ", $inputStr); 

을, 그러나, 그것은 잘 작동합니다. 누군가가 내게 말할 수 있습니까?

  1. 왜 CR/LF에서 첫 번째 preg_replace 필터가 나오지 않습니까?
  2. 이 두 번째 preg_repalce가 실제로 수행중인 작업은 무엇입니까? 나는 대부분 첫 부분을 이해하지만, 두 번째 부분은 나를 혼란스럽게합니다. 그것은 효과가 있지만 왜 그런지 모르겠습니다.
  3. 어떻게 든 1 줄로 결합 할 수 있습니까?

답변

1

첫 번째 정규식은 문자 또는 공백이 아닌 모든 문자를 제거합니다. CRLF는 공백이므로 필터링되지 않습니다.

두 번째 공백 문자는 공백 문자로 대체됩니다. 본질적으로 그것은 일련의 공백을 하나의 공간으로 압축합니다 (한정 기호가 탐욕 스럽기 때문에).

첫 번째 정규식에서 \s을 제거하는 것이 좋습니다. 작동하는지 확인하십시오.

+0

감사합니다. 어느 날 나는 좋은 정규식 튜토리얼과 연습을 읽을 충분한 시간을 가질 것이다, 하하. 나는 그것이 많이 필요하다고 생각한다. 나는 그것을 시도하고 나중에 알려 드리겠습니다. –

+0

대단히 감사합니다.) –

2
  1. 글자와 공백을 제외한 모든 부분을 삭제하라고했습니다. 개행 문자는 공백 문자이므로 제거되지 않습니다. \s 대신 \h을 사용하면 가로 공백 만 제외 할 수 있습니다.
  2. 단순히 "하나 이상의 공백 문자 (\s+)의 모든 시퀀스를 단일 공백으로 바꿉니다."라는 의미입니다.
  3. preg_replace("/[^A-Za-z]+/", " ", ...) 할 수 있습니다.
1
  1. \s 일치 \n 등의 공백.
  2. 모든 공백 문자를 공백으로 대체합니다.
  3. 당신은 하나의 읽을 수없는 라인을 만들 수 있지만 아마 하나의 정규식은 아닙니다.
관련 문제