PHP

PHPでよく使う正規表現

More than 3 years have passed since last update.

全て、以下のようにpreg_match関数で使用します。

preg_match($regex, $string);


全角カタカナにマッチ

$regex = '/\A[\x{30A1}-\x{30FC}().-]+\z/u';

「ヱ」や「・」なども含んでいるので用途に合わせて適宜修正して下さい。

参考:unicode表


半角カタカナにマッチ

$regex = '/\A[\x{FF66}-\x{FF9F}]+\z/u';

参考:unicode表


メールアドレスにマッチ

$regex = '/\A[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[_\p{L}0-9][-_\p{L}0-9]*\.)*(?:[\p{L}0-9][-\p{L}0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})\z/ui';

実際のところ、メールアドレスの正規表現については普遍的な正解というものは有りませんので状況に応じて適宜修正してご利用下さい。

参考:PHPしか書けないザコがメールアドレス正規表現でガチ勢に挑んでみた


クレジットカード番号にマッチ

全てのカード会社のカードにマッチするのは以下。

$regex = '/\A(4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|^(?:2131|1800|35\d{3})\d{11}$)\z/';

VISAにマッチするのは以下。

$regex = '/\A4\\d{12}(\\d{3})?\z/';

MasterCardにマッチするのは以下。

$regex = '/\A5[1-5]\\d{14}\z/';

JCBにマッチするのは以下。

$regex = '/\A(3\\d{4}|2100|1800)\\d{11}\z/';

Amexにマッチするのは以下。

$regex = '/\A3[4|7]\\d{13}\z/';

Dinersにマッチするのは以下。

$regex = '/\A(?:3(0[0-5]|[68]\\d)\\d{11})|(?:5[1-5]\\d{14})\z/';

Discoveryにマッチするのは以下。

$regex = '/\A(?:6011|650\\d)\\d{12}\z/';


IPアドレスにマッチ

IPv4にマッチするのは以下。

$regex = '\A(?:(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])\z';

IPv6にマッチするのは以下。

$regex = '\A((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?\z';


UUIDにマッチ

$regex = '/\A[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[0-5][a-fA-F0-9]{3}-[089aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}\z/';

preg_match($regex, $uuid);

参考:RFC4122