Web/DB プログラミング徹底解説

ホーム > PHP プログラミング > PHP 正規表現サンプル集

PHP 正規表現サンプル集

スポンサーリンク

正規表現サンプル集

ここでは良く利用する正規表現パターンを集めています。基本的に PHP のコードであり、置換関数も含めているものもあります。少し変更するだけで、 JavaScript などでも利用できるでしょう。

ちなみに、ご自身で動作確認したうえでご利用くださいませ。

URL

'\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]'

//URL を HTML のリンクに置き換える
preg_replace('\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]', 
  '<a href="\0">\0</a>', $text);

メールアドレス

新しい TLD への対応は随時行わないといけませんが、基本的な様式として参考にしてください。

尚、ドメイン名ではなく IP アドレスを利用したメールアドレスには対応していません。また、大文字小文字を区別しないようにしてください。

//ドキュメント内のメールアドレスの検索に利用できます。
'\b[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b'

//文字列全体がメールアドレスである場合にマッチします。
//入力検証に使う時は大文字小文字を区別しないと良いです。
'^[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$'

//特定の TLD 
'^[A-Z0-9._%-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|biz|info|name|aero|biz|info|jobs|museum|name)$'

//HTML リンク
'\b(?:mailto:)?([A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4})\b'

クレジットカード

//メジャーなクレジットカード
'^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$'

//アメリカンエクスプレス
'^3[47][0-9]{13}$'

//ダイナーズクラブ
'^3(?:0[0-5]|[68][0-9])[0-9]{11}$'

//ディスカバー
'^6011[0-9]{12}$'

//マスターカード
'^5[1-5][0-9]{14}$'

//VISA カード
'^4[0-9]{12}(?:[0-9]{3})?$'

日付

2月31日のような意味的に不正な日付にはマッチしてしまうので注意してください。

//日付 d/m/yy と dd/mm/yyyy
//1/1/00 から 31/12/99 及び 01/01/1900 から 31/12/2099
'\b(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?[0-9]{2}\b'

//日付 dd/mm/yyyy
//01/01/1900 から 31/12/2099
'(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}'

//日付 m/d/y and mm/dd/yyyy
//1/1/99 から 12/31/99 and 01/01/1900 から 12/31/2099
//日付の区切りとしてダッシュ、空白、スラッシュ、ドットを受け入れます
'\b(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}\b'

//日付 mm/dd/yyyy
//01/01/1900 から 12/31/2099
'(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9]{2}'

//日付 yy-m-d or yyyy-mm-dd
//00-1-1 から 99-12-31 及び 1900-01-01 から 2099-12-31
'\b(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])\b'

//日付 yyyy-mm-dd
//1900-01-01 から 2099-12-31
'(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])'

区切り

//二重引用符内ではないコンマをタブで置き換える
'((?:"[^",]*+")|[^,]++)*+,'

HTML

//コメント
'<!--.*?-->'

//HTML ファイル
'<html>.*?<head>.*?<title>.*?</title>.*?</head>.*?<body[^>]*>.*?</body>.*?</html>'


//HTML タグのペア
//タグ名が第一キャプチャリンググループに入り、タグ内の文字列が第二のグループに入ります。
'<([A-Z][A-Z0-9]*)[^>]*>(.*?)</\1>'

IP アドレス

//0.0.0.0 から 999.999.999.999
'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b'

//0.0.0.0 から 255.255.255.255
'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'

//空白行 (空白文字も無し)
'^$'

//空白行 (空白文字有りも可)
'^[ \t]*$'

//空白行の改行
'^\r?\n'

//空白行 (空白文字可) の改行
'^[ \t]*$\r?\n'

//重複行
'^(.*)(\r?\n\1)+$'

Numbers

//金額
//千の桁の区切りのカンマ及び小数点以下2桁可
'\b[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?\b'

//千の桁の区切りのカンマ可かつ小数点以下2桁必須
'\b[0-9]{1,3}(?:,?[0-9]{3})*\.[0-9]{2}\b'

//符号はオプション。整数部分必須
'[-+]?\b[0-9]+(\.[0-9]+)?\b'

//16進数
'\b0[xX][0-9a-fA-F]+\b'

//千の桁区切りのカンマの挿入
//123456789.00 を 123,456,789.00 とする
'(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))'

//整数
'\b\d+\b'

//符号はオプション。整数
'[-+]?\b\d+\b'

パスワード

パスワードの複雑さのチェックを行います。

//6文字以上の文字、数字、下線、ハイフン
//最低でもひとつ大文字、ひとつ小文字、ひとつ数値を含む
'\A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}\z'

//6文字以上の文字を含むかチェック
//最低でもひとつ大文字、ひとつ小文字、ひとつ数値を含む
'\A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])\S{6,}\z'

ファイルパス

//Windows 用
'\b[a-z]:\\[^/:*?"<>|\r\n]*'

//UNC 名
'(?:(?#drive)\b[a-z]:|\\\\[a-z0-9]+)\\[^/:*?"<>|\r\n]*'

電話番号

//アメリカ
//3334445555, 333.444.5555, 333-444-5555, 333 444 5555, (333) 444 5555 にマッチ
//(333) 444-5555 の形に置換する
preg_replace('\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})', '(\1) \2-\3', $text);

エスケープ

//メタ文字をエスケープする
preg_replace("[][{}()*+?.\\^$|]", "\\$0", $text);

SSN (ソーシャルセキュリティ番号)

'\b[0-9]{3}-[0-9]{2}-[0-9]{4}\b'

トリム

//文字の後ろの空白をトリム (改行含む)
preg_replace("\s+\z", "", $text);

//文字の前後の空白をトリム
preg_replace("\A\s+|\s+\z", "", $text);

//文字の前の空白をトリム
preg_replace("\A\s+", "", $text);

//各行の行末の空白をトリム
preg_replace("[ \t]+$", "", $text);

//各行の前後の空白をトリム
preg_replace("^[ \t]+|[ \t]+$", "", $text);

//各行の前方の空白をトリム
preg_replace("^[ \t]+", "", $text);

住所

//アメリカの州コード
'/\\b(?:A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])\\b/'

//アメリカ ZIP コード
'\b[0-9]{5}(?:-[0-9]{4})?\b'
スポンサーリンク