设为首页 收藏本站
查看: 602|回复: 0

[经验分享] 【php】正規表現

[复制链接]

尚未签到

发表于 2015-8-29 11:31:55 | 显示全部楼层 |阅读模式
【概要】
PHPには正規表現関数群が3種類ある。

  • 標準正規表現関数(POSIX Regex):ereg()系。マルチバイト不可。
  • PCRE正規表現関数(Perl互換):preg_match()系。マルチバイトはUTF-8のみ対応。
  • マルチバイト文字対応正規表現関数:mb_ereg()系。Rubyの正規表現を使用。PHP5.0で「鬼車」組み込み。

主な特徴?

  • PCREはバイナリセーフで、POSIXはセーフじゃない。
  • PCREの正規表現は//などのデリミタで囲う必要がある。
  • Perl互換の正規表現構文を使用するpreg_match()のほうが、多くの場合ereg()よりも速く動作するらしい。


EUC-JPを使うのでmb_ereg。
●int mb_ereg ( string $pattern , string $string [, array $regs ] )

  • マルチバイト文字列に正規表現マッチを行う。
  • マルチバイト対応の正規表現マッチを行い、一致した場合は 1 を返す。オプションの 3 番目の引数を指定した場合は、一致した部分のバイト数を返し、一致した部分文字列が配列 regs に格納される。空文字に一致した場合は 1 を返す。正規表現に一致しないか、エラーを発生した場合に FALSE を返す。


【正規表現例】
●IP4:xxx.xxx.xxx.xxxの形式チェック
"^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$"
●西暦日付:yyyy-mm-ddの形式チェック
"^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$"
●URL:有効文字以外をチェック
"[^\-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]"
●USERAGENT:有効文字以外をチェック
"[^\-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#\x20\[\]\{\}]"
●名前:漢字チェック(未定義含む全範囲)
"[\xa1\xa1-\xfe\xfe]"
●名前英語名:有効文字チェック(英文字、ハイフン、ピリオド、半角スペース)
"[a-zA-Z\-.\x20]+"
形式チェックは難しいかも。
●フリガナ:全角カナチェック(全角カナ、長音、全角・半角スペース)
"^[\x20ァ-ヶー- ]+$"
●Email:PHP系ライブラリの実装(バージョンで異なる可能性あり)

  • phpspot:シンプル

'/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/'

  • PEAR::Mail_RFC822:オーバーライン文字が入力できませんh

$regex = $strict ? '/^([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i' : '/^([*+!.&#$|\'\\%\/0-9a-z^_`{}=?(オーバーライン):-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i';

  • CakePHP:63文字の根拠は?

'/\\A(?:^([a-z0-9][a-z0-9_\\-\\.\\+]*)@([a-z0-9][a-z0-9\\.\\-]{0,63}\\.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)\\z/i'

  • Ethna

'/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i'


【正規表現注意事項】

  • perlのサンプルで//囲みがあるものは不要なのではずす。
  • 空白文字は\sじゃなくて、\x20。
  • 16進数文字の連続(例:\x20\x20)は多バイト符号で表現された1文字と見なされる。
  • 英語名表記はa~z,A~Z,-(ハイフン),.(ピリオド),'(アポ),"(ダブル)が見受けられる。アポとダブルはミドルネームのくくりに使われる。アポは発音補助(オライリー:O'Reilly)のように使われる。~3世の記述は、IIIとなる。数字0~9は使われない。通常判定は、英文字とハイフン、ピリオド、半角スペースでOK。
  • emailについて

    • emailはコメントネストがあるため正規表現では記述できないらしい。
    • @より前の部分は、RFCの定義では半角英数記号なんでもありらしい。
    • 日本では、プロバイダが発行するメールアカウントは、半角英数とハイフン、アンダーバー、ピリオドのみとするところがほとんどと思われる。(携帯含む)
    • WEBメーラー系、特にGmailは、向こうの文化なので、アカウント部分に記号あり。Gmailの独自仕様?でアカウント部分の+文字から@までは無効らしい。なので記述し放題@@;
    • 最適解は無い。自分のサイト運用に合わせて、チェック仕様(対インジェクション含む)を考える。




【参考URL】
●PHP で使用できる正規表現演算子(mb_ereg)
http://www.kt.rim.or.jp/~kbk/regex/regex.html#PHP
●鬼車正規表現
http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
●EUC-JP文字コード表
http://charset.7jp.net/euc.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105877-1-1.html 上篇帖子: PHP实现IP–数字互相转换 下篇帖子: PHP 线程安全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表