preg_match for Korean, Japanese, Chinese

한글, 한자, 일어를 검색하는 정규식은 아래와 같습니다.
예전에 블로그에 포스팅했던 내용이었습니다만… 여기에서 영문이나 특수문자를 허용하려면 [ ] 안에 더 적어주면 되겠죠.

주의할점
1. PCRE 정규식 사용시 식의 맨 처음과 끝부분은 구분자를 넣어줘야 합니다.

예를들어 영문 A~Z 를 대소문자 구별없이 찾고자 할때
@[a-z]@i

2. 정규식 내에 [ ] 안에 마이너스(-) 를 검색하고자 할때는 Escape 시켜줘야 합니다.
안그러면 범위 지정이 되어서 엉뚱한 결과가 나올 수 있습니다.

@[a-z,.\-~]@i

위의 정규식과 아래 정규식은 결과가 조금 다릅니다.

@[a-z,.-~]@i

. 문자 부터 ~ 문자 사이를 지정하게 되는 식이 되버리니까요.

//  예제 문자열
$content = “test content☆漢字〓韓國外交部對外稱, 應美方要求,韓國貿易部長金宗塤和美國貿易代表施瓦布本週一下午還舉行了一個「非正式磋商」。end◆ 日語〓慰謝料としてフルハウス(Full House)をあげるというィヨンジェの言葉に,ジウンは寝ても寝る事ができないで悩む。end◆ 한글〓해쉬(Hash)값 필터링 시스템(Filtering system)은 디지털 파일에 고유의 키 값을 매겨서 등록, 관리하는 것으로 저작권 침해 신고가 접수됐을 경우 이 키 값을 기준으로 검색, 침해 여부를 판단할 수 있는 방식이다. end★”;
echo ‘<pre>’;// PRE

//  한글
preg_match_all(‘![‘
.’\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}’
.’]+!u’, $content, $match);
print_r($match);

//  한자
preg_match_all(‘![‘
.’\x{2E80}-\x{2EFF}’// 한,중,일 부수 보충
.’\x{31C0}-\x{31EF}\x{3200}-\x{32FF}’
.’\x{3400}-\x{4DBF}\x{4E00}-\x{9FBF}\x{F900}-\x{FAFF}’
.’\x{20000}-\x{2A6DF}\x{2F800}-\x{2FA1F}’// 한,중,일 호환한자
.’]+!u’, $content, $match);
print_r($match);

//  일어
preg_match_all(‘![‘
.’\x{3040}-\x{309F}’// 히라가나
.’\x{30A0}-\x{30FF}’// 가타카나
.’\x{31F0}-\x{31FF}’// 가타카나 음성 확장
.’]+!u’, $content, $match);
print_r($match);
echo ‘</pre>’;

 

——————————————————–

 

・全て数値かどうか(全角でも半角でもOK)
/^¥d+$/

・全て半角の数値かどうか
/^[0-9]+$/

・全て整数かどうか(マイナス、小数点使用可 & 全角でも半角でもOK)
/^[-]?¥d+(¥.¥d+)?$/

・全て半角の整数かどうか
/^[-]?[0-9]+(¥.[0-9]+)?$/
文字編
・全て半角アルファベットかどうか(大文字でも小文字でもOK)
/^[a-zA-z¥s]+$/

・全て半角アルファベット、または数値かどうか
/^[a-zA-Z0-9]+$/

・全て全角ひらがな、またはカタカナかどうか
/^[ぁ-んァ-ン]+$/

・全て全角ひらがなかどうか
/^[ぁ-ん]+$/

・全て全角カタカナかどうか
/^[ァ-ン]+$/

・全て半角カタカナかどうか
/^[ァ-ン゙゚]+$/
その他(いろんな表記方法があるので解説付き)
・正しいメールアドレスかどうか
/^([a-zA-Z0-9_¥.¥-])+¥@(([a-zA-Z0-9¥-])+¥.)+([a-zA-Z0-9]{2,4})+$/
/^([a-zA-Z0-9])+([a-zA-Z0-9¥._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9¥._-]+)+$/
/^[A-Za-z0-9]+[¥w-]+@[¥w¥.-]+¥.¥w{2,}$/
/^[¥w_-]+@[¥w¥.-]+¥.¥w{2,}$/

【 解説 】
1番上:@前は「英数字_-.」使用可、@後ひとつ以上の「.」があるか、「.」で終わっていないか
2番目:@前は「英数字_-.」使用可、@後は2文字以上入力されているか否か
3番目:@前は「英数字_-」使用可、@後ひとつ以上の「.」があるか、「.」で終わっていないか
4番目:@前は「英数字_-」使用可、@後ひとつ以上の「.」があるか、「.」の後に2文字以上英数字が入っているか否か

・正しいURLかどうか
/^(http|ftp):¥/¥/.+$/
/^(https?|ftp)(:¥/¥/[-_.!~*¥'()a-zA-Z0-9;¥/?:¥@&=+¥$,%#]+)$/

【 解説 】
1番上:「http、ftp」対応。「://」の後1文字以上入っているか否か
2番目:「http、https、ftp」対応。「://」の後1文字以上の英数字(記号含む)が入っているか否か

・正しい郵便番号かどうか
/^¥d{3}-¥d{4}$|^¥d{3}-¥d{2}$|^¥d{3}$/
/^¥d{3}¥-¥d{4}$/

【 解説 】
1番上:対応形式「XXX-XXXX、XXX-XX、XXX」
2番目:対応形式「XXX-XXXX」

・正しい携帯番号かどうか
/^¥d{3}-¥d{4}-¥d{4}$|^¥d{11}$/
/^0¥d0-¥d{4}-¥d{4}$/

【 解説 】
1番上:対応形式「XXX-XXXX-XXXX、XXXXXXXXXXX(11桁)」
2番目:対応形式「0X0-XXXX-XXXX」

・正しい電話番号かどうか
/^[0-9-]{6,9}$|^[0-9-]{12}$/
/^¥d{1,4}-¥d{4}$|^¥d{2,5}-¥d{1,4}-¥d{4}$/

【 解説 】
1番上:対応形式「-」なしの6~9桁、「-」ありの時は12桁以下であるか否か
2番目:対応形式「(1~4桁)-XXXX、(2~5桁)-(1~4桁)-XXXX」
(市外局番からと市外局番からでは「-」の位置が違うのでチェックは難しい)

・正しい時刻か否か
/^([01]?[0-9]|2[0-3]):([0-5][0-9])$/

・正しいクレジットカードナンバー否か
/^((4¥d{3})|(5[1-5]¥d{2})|(6011))([- ])?¥d{4}([- ])?¥d{4}([- ])?¥d{4}|3[4,7]¥d{13}$/
(VISA, MasterCard, American Express のフォーマットに対応)

Posted in PHP