2011-01-25 5 views
6

저는 정규 표현식에서 그런 아마추어입니다.이 정규 표현식에서 공백 (얼마나 많은지는 중요하지 않습니다)을 어떻게 허용합니까? 내가 하이픈 전에 공간을 넣어어떻게이 정규식에서 공백을 허용합니까?

if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE; 
+1

이제 수액을 허용합니다. – Mchl

+1

정규식이 이미 공백을 허용합니다. – CanSpice

+1

저는 이중 부정문 때문에 혼란 스럽다고 생각합니다.정규식에서 공백을 허용하거나 전체 조건에서 공백을 허용 하시겠습니까? –

답변

17
if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE; 

참고. 공백이 하이픈 다음에 오는 경우 밑줄에서 공백까지 문자 범위를 지정합니다. (. 또한 문제를 탈출 하이픈 앞에 백 슬래시를 넣어 evadable)

이것은 당신이 "수"가 무엇을 의미한다고 가정한다이다 :이 정규식은 문자열을 확인하는 데 사용하고있는 경우 일치되고있다 , 문자열은 (따라서 return FALSE) 허용되지 않습니다. 따라서 무효화 된 문자 클래스 ([^...])의 문자는 실제로 이며 허용되는 문자는입니다. (이이 질문에 몇 가지 일반적인 혼란을 일으키는 것입니다.)

1

당신은 당신이 필요합니다 단지 공간을 허용해야하는 경우 '/ /'

당신이 어떤 공백 문자를 허용해야하는 경우 (공백, 탭, 줄 바꿈) - 사용 '/ \ S /'

그리고 당신은 당신의 패턴에 공백을 추가해야하는 경우 (공간을 무시하는 것을 의미) - 사용/[^ A-ZA-z0-9_ \ -]/

2

하지 않음 질문에 대한 답변이 많지만 checking regex expressions에 유용하다고 생각되는 사이트입니다. 또한 입력 필드에서 마우스를 가져 가면 표현의 각 부분이 무엇을 의미하는지 설명합니다.

15

'/[^A-Za-z0-9_-\s]/'
같은 일반 expretion의 \s하면 공간

2

귀하의 질문이 명확하지를 의미한다. $strA-Za-z0-9_-이 아닌 문자가 있으면 정규 표현식이 그대로 사용됩니다. 공백은 이러한 문자 중 하나가 아니므로 정규식이 일치하고 전체 문은 FALSE을 반환합니다. 이 경우

당신이 원하는 것을하지 않고, 당신이 $strA-Za-z0-9_- 또는 공간에없는 모든 문자가있는 경우, 정규 표현식이 일치 할, 당신은 (A-Za-z0-9_ -로 변경 밑줄 사이의 공간에주의 할 필요가 및 하이픈). 따라서 문자열에 A-Za-z0-9_ -이 아닌 문자가 있으면 정규 표현식이 일치하고 명세서에 FALSE이 반환됩니다. 문자열이 모두 A-Za-z0-9_ -으로 구성되어 있으면 정규식이 일치하지 않아 처리가 다음 줄로 계속 진행됩니다.

편집 : 여기 예입니다 : 당신의 문자열, abc123def 경우 현재 정규 표현식이 일치하지 않습니다 그리고 당신은 FALSE를 반환하지 않습니다. 문자열이 abc123 def이면 정규식이 일치하고 문은 FALSE을 반환합니다. 문자 클래스를 A-Za-z0-9_ -으로 변경하면 abc123defabc123 def에 대해 정규 표현식이 일치하지 않으며 FALSE을 반환하지 않습니다.