on
정규 표현식의 활용
정규 표현식의 활용
■전화번호 확인
/^[[:digit:]]{2}\-[[:digit:]]{4}\-[[:digit:]]{4}/ // 02-1234-5678, ... /^[[:digit:]]{2,3}\-[[:digit:]]{3,4}\-[[:digit:]]{4}/ // 02-1234-5678, 031-123-5678, ...
$tel = "02-1234-5678"; $cell = "010-1234-5678"; $pattern_01 = "/^[[:digit:]]{2}\-[[:digit:]]{4}\-[[:digit:]]{4}/"; if (preg_match($pattern_01, $tel, $matches_01)) { var_dump($matches_01); // array(1) { [0]=> string(12) "02-1234-5678" } } else { echo "{$tel}은 유효한 형식의 전화번호가 아닙니다."; } if (preg_match($pattern_01, $cell, $matches_02)) { var_dump($matches_02); } else { echo "{$cell}은 유효한 형식의 전화번호가 아닙니다."; } $pattern_02 = "/^[[:digit:]]{2,3}\-[[:digit:]]{3,4}\-[[:digit:]]{4}/"; if (preg_match($pattern_02, $tel, $matches_03)) { var_dump($matches_03); // array(1) { [0]=> string(12) "02-1234-5678" } } else { echo "{$tel}은 유효한 형식의 전화번호가 아닙니다."; } if (preg_match($pattern_02, $cell, $matches_04)) { var_dump($matches_04); // array(1) { [0]=> string(13) "010-1234-5678" } } else { echo "{$cell}은 유효한 형식의 전화번호가 아닙니다."; }
preg_match() : 정규 표현식에 해당하는 패턴이 검색되면, 더는 검색하지 않고 검색을 중단합니다.
이 함수는 일치하는 패턴이 존재하면 1을 반환하고, 존재하지 않으면 0을 반환합니다.
※ 정규 표현식에서 '\'문자 바로 뒤에 일반 문자가 나오면, 해당 문자는 특수 문자로 인식됩니다. 또한, '\'문자 바로 뒤에 특수 문자가 나오면, 해당 문자는 일반 문자로 인식됩니다.
■이메일 주소 확인
/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/ // [email protected], ... /([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}/ // [email protected], [email protected], ... // [0-9a-zA-Z_-]+ // 위의 정규식은 숫자나 영문 대소문자, 언더스코어(_) 또는 '-'기호를 포함한 문자가 1번 이상 반복되는 문자열을 의미 // (\.[0-9a-zA-Z_-]+){1,2} // 위의 정규식은 숫자나 영문 대소문자, 언더스코어(_) 또는 '-'기호를 포함한 문자가 1번 또는 2번 반복되는 문자열을 의미
$com = "[email protected]"; $co = "[email protected]"; $pattern_01 = "/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/"; if (preg_match($pattern_01, $com, $matches_01)) { var_dump($matches_01[0]); // string(13) "[email protected]" } else { echo "{$com}은 유효한 형식의 이메일 주소가 아닙니다."; } if (preg_match($pattern_01, $co, $matches_02)) { var_dump($matches_02[0]); // string(12) "[email protected]" } else { echo "{$co}은 유효한 형식의 이메일 주소가 아닙니다."; } $pattern_02 = "/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}/"; if (preg_match($pattern_02, $com, $matches_03)) { var_dump($matches_03[0]); // string(13) "[email protected]" } else { echo "{$com}은 유효한 형식의 이메일 주소가 아닙니다."; } if (preg_match($pattern_02, $co, $matches_04)) { var_dump($matches_04[0]); // string(15) "[email protected]" } else { echo "{$co}은 유효한 형식의 이메일 주소가 아닙니다."; }
PHP에서는 유효한 형식의 이메일 주소인지 확인하기 위해 정규식 표현뿐만 아니라 filter_var() 함수를 제공한다.
$com = "[email protected]"; $co = "[email protected]"; if (filter_var($com, FILTER_VALIDATE_EMAIL)) { echo $com; // [email protected] } else { echo "{$com}은 유효한 형식의 이메일 주소가 아닙니다."; } if (filter_var($co, FILTER_VALIDATE_EMAIL)) { echo $co; // [email protected] } else { echo "{$co}은 유효한 형식의 이메일 주소가 아닙니다."; }
■한글 확인
/[가-힣]/ // 한글 소리 마디 /[\\x{ac00}-\\x{d7af}]/u // 한글 소리 마디의 유니코드 범위 목록값 // 두 정규 표현식 모두 한글에서 표현할 수 있는 11,172개의 한글 소리 마디를 모두 검색할 수 있지만, // 첫 번째 정규 표현식은 언어 설정이 한글이 아닌 시스템에서는 동작하지 않을 수 있다. // 두 번째 정규 표현식처럼 'u'플래그를 추가하여 해당 정규 표현식 문자열을 UTF-8로 인코딩 된 것처럼 취급할 수 있다.
$eng = "gil-dong Hong"; $kor = "홍길동"; $pattern = "/[가-힣]+/"; // 한글 소리 마디 if (preg_match($pattern, $eng, $matches_01)) { var_dump($matches_01); } else { echo "{$eng}에는 한글이 포함되어 있지 않습니다."; // gil-dong Hong에는 한글이 포함되어 있지 않습니다. } if (preg_match($pattern, $kor, $matches_02)) { var_dump($matches_02); // array(1) { [0]=> string(9) "홍길동" } } else { echo "{$eng}에는 한글이 포함되어 있지 않습니다."; }
문자열에서 한글만 제거하는 예제
$text = "123가나abc다라"; $pattern = "/[\\x{ac00}-\\x{d7af}]+/u"; // 한글 소리 마디(UTF-8) $arr = preg_match_all('/./u', $text, $matches); // 줄 바꿈 문자(
)를 제외한 임의의 한 문자씩 검색함. // 해당 문자가 한글이면, 빈 문자열로 대체함. echo preg_replace($pattern, '', $text); // 123abc
preg_match_all() : 정규식에 맞는 것을 모두 추출한다.
preg_replace() : 지정된 패턴을 다른 패턴으로 바꿔준다.
※ /./ : 정규 표현식에서 단일 문자로 줄바꿈 문자를 제외한 모든 단일 문자를 의미한다.
from http://woong971.tistory.com/32 by ccl(A) rewrite - 2021-10-28 22:00:40