【php】正?表?

WBOY
WBOYOriginal
2016-06-23 14:34:43909browse

【概要】
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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:php中的cookieNext article:cache.func.php