コンピューター, プログラミング
PHP(正規表現) - それは何ですか? 例とチェックの正規表現
すべての近代的なプログラミング言語のテキストを使用する場合、開発者は常にテストフラグメントおよび文字情報の処理動作を他のタイプの検索と置換、所望のパターンに準拠して入力検証の目的に会います。 時間の損失、その発展と近代化のコードの互換性や複雑さにつながる独自の検証アルゴリズムを開発。
インターネットおよびWEB-デザイン言語の急速な発展は、このコードに必要な最小量のテキスト処理の汎用性とコンパクトな手段の作成が必要。 それは例外ではありませんし、初心者やPHP言語のプロの開発者の間で人気があります。 テキストを処理するタスクを簡素化し、数十と数百行のコードを減らすために、テキストテンプレートとして、正規表現言語。 多くの問題は、それなしで全て解決することはできません。
PHPの正規表現
«EREG»、«mb_ereg»と«プリプレグ» - PHP言語は、正規表現を扱うための3つのメカニズムがあります。 最も一般的なのは、インターフェース«プリプレグ»、その機能はもともとPHPパッケージに含まれているPerl言語用に開発PCRE正規表現のサポート、のライブラリへのアクセスを提供しています。 正規表現の言語で特定のパターンに応じて、指定されたテキスト文字列マッチングの関数をプリプレグは、求めています。
構文の基本
短い記事の一部として、特別な文献があり、このため、全体の正規表現構文を詳細に説明することは不可能です。 我々は、開発者のための機会を表示し、コード例を理解するための唯一の主要な要素を提示します。
PHPでの正規表現は、正式には非常に難しい定義されたので、説明を簡略化されます。 正規表現は、テキスト文字列です。 それは、専用のセパレータテンプレートとそれを処理する方法を示す改質剤から成ります。 パターンの様々な代替と繰り返しで含める可能性。
例えば、発現/ \ dにおいて、{3} - \ dは{2} - \ dの{2} / M分周器は、 "/"、テンプレートが続き、そしてシンボル«Mの»は、改質剤です。
正規表現のすべてのパワーはメタキャラクタを使用してエンコードされます。 「\」 - 主要言語のメタ文字はバックスラッシュです。 それは、反対側の文字を、次の種類を変更する(すなわち。E.は、通常の文字のワイルドカードおよびその逆に変換されます)。 «|»、代替テンプレートを指定するもう一つの重要なメタ文字は、直線です。 メタキャラクタのより多くの例:
| ^ | オブジェクトまたは文字列を開始します |
| ( | サブパターンを開始します |
| ) | エンドサブパターン |
| { | 数量詞を開始 |
| } | エンド数量詞 |
| \ dは | 0から9までの十進数 |
| \ D | 数ではありません任意の文字 |
| \ sの | 空のシンボル、スペース、タブ、 |
| \ワット | 記号辞書 |
別の有効な文字なので、異なっているXYZとABCの表現として考えPHP、正規表現を処理し、スペース。
サブパターン
括弧でPHPの正規サブパターンでは、彼らは時々「副次式」と呼ばれます。 以下の機能を実行します。
割り当ての選択肢。 例えば、 ヒートパターン(何か|バード|)の言葉「熱」、「火の鳥」と「ホット」と一致しています。 そして、括弧なしでそれが唯一の空の文字列、「鳥」と「ホット」になります。
「壮大な」サブパターン。 これは、パターンは、サブストリングにマッチした場合は、すべての一致を返すことを意味します。 明確にするために、我々は例を与えます。 次の正規表現を考える:(|金メッキ)(メダル|(ゴールドカップ))の勝者が受け取る-との一致のための文字列を、「勝者は金メダルを取得します。」 最初のフレーズに加えて、検索結果が発行されます:「金賞」、「 メダル」、「ゴールド」。
演算子の繰り返し(kvadrifikatory)
正規表現のコンパイルでは数字や記号の繰り返しを分析する必要があることが多いです。 これは、問題は、そうでない場合は繰り返しの多くではありません。 我々は彼らの正確な数は分からないときには何をすべきか? このケースでは、特殊なメタ文字を使用する必要があります。
番号を指定するには、メタ文字 - kvadrifikatoryを使用繰り返しの説明について。 Kvadrifikatoryは、2つのタイプがあります。
- 括弧内共通。
- 減少しました。
このようなX {2,5}のように括弧内の2つの数字の形で許可反復要素の最小および最大数で触れ全体数量詞。 反復の最大数は知られていない場合、二番目の引数が指定されない:X {2}。
略称数量は不必要な過負荷の構文を避けるために、繰り返しの最も一般的なのためのシンボルです。 通常、3つのカットがあります。
1 * - {0}に相当するゼロ以上の繰り返し、。
2 + - 一つ以上の繰り返し、すなわち、{1} ...
3.? - ゼロか一方のみリピート - {0,1}。
例の正規表現
正規表現を学ぶ人のために、例 - 最高の教科書。 私たちは、最小限の労力で自分の機会を示しているいくつかを与えます。 すべてのコードは、上記のPHP 4.xとのバージョンと完全に互換性があります。 完全に我々は完全な構文と考え、「正規表現」、J .. Friedlのことで本をお勧めしますし、PHP、だけでなく、PythonやPerlのは、MySQL、Javaの、ルビー、およびC#のためだけではなく、正規表現の例があるすべての言語機能の構文と使用方法を理解します。
検証E-mailアドレス
タスク。 訪問者はアドレスのメールを要求されているインターネットのページがあります。 正規表現は、メッセージを送信する前にアドレスの正当性を確認する必要があります。 チェックは、指定したメールボックスが実際に存在し、メッセージを受け取ることを保証するものではありません。 しかし、それができる、明らかに間違ったアドレスを取り除きます。
決断。 任意のプログラミング言語と同様に、PHPで正規表現の電子メール・アドレスの検証は異なる方法で実装することができ、そしてこの記事の例では、最終的かつ唯一の選択肢ではありません。 したがって、それぞれの場合に、我々はプログラミングと特定の実装が開発者に完全に依存する際に考慮される必要がある要件のリストを提供しなければなりません。
このように、有効な電子メールをテスト式は、以下の条件を確認してください。
- 起動中に存在することは、@記号を並べる、とにギャップが存在しません。
- @記号のアドレスのドメイン部分には、ドメイン名の有効な文字のみが含まれています。 同じことは、ユーザーの名前に適用されます。
- ユーザ名を確認する際、このようなアポストロフィまたは垂直線などの特殊文字の存在を決定する必要があります。 このような記号は、潜在的に危険であり、SQLインジェクションという攻撃のように種類に含有させることができます。 アドレスは避けてください。
- ユーザ名は、文字列の最初または最後の文字ではないかもしれない一点のみを許可します。
- ドメイン名は、少なくとも2以上、6つの文字を含める必要があります。
例には、これらのすべての条件が次の図に見ることができます考慮に入れて。
URLの検証
タスク。 指定されたテキスト文字列が有効であるかどうかを確認してください アドレスURL。 もう一度、我々は正規表現のURLチェックは、さまざまな方法で実現することができることに注意してください。
決断。 次のように私たちの最終バージョンは次のとおりです。
/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6})([\/\w \ .-] *) * \ /?$ /
今、図面を用いてより詳細にその構成要素を分析します。
| 請求項1 | URLは、任意の文字を持つべきではないの前に |
| 請求項2 | 必須プレフィックスの存在を確認する«のhttp» |
| アイテム3 | 何の記号があってはいけません |
| 請求項4 | もしそこ«S»、セキュアな接続へのURLのポイント«HTTPS» |
| 請求項5 | 「//」の必要な部分 |
| 請求項6 | いいえ文字 |
| P。7-9 | 検証 第一レベルドメイン とポイントの存在を |
| p.10-13 | セカンドレベルの書き込みのドメインやポイントの確認 |
| p.14-17 | ファイル構造のURL - 数字、英字、アンダースコア、ダッシュ、ドットの集合、そして最後にスラッシュ |
クレジットカード番号を確認します
タスク。 あなたは、最も一般的な決済システムの入力されたクレジットカード番号の検証を実装する必要があります。 カードのみのバリアント ビザとマスター。
決断。 式を作成する場合は、アカウントに入力された部屋のギャップの存在の可能性を取る必要があります。 マップ上の数字は、簡単に読んだりディクテーションのためのグループに分けられます。 したがって、人は(すなわち。E.はスペースを使用して)このように番号を入力しようとすることができることは当然です。
考慮可能なスペースやハイフンを取る普遍的な表現を書く、単純に数字以外のすべての文字を捨てるよりも複雑です。 したがって、我々は数字以外のすべての文字を削除し、ワイルドカード表現/ Dを、使用することをお勧めします。
今、あなたは小切手番号に直接行くことができます。 すべての企業は、クレジットカード発行会社は、一意の番号の形式を使用します。 例では、それが使用され、そしてクライアントは、会社の名前を入力する必要はありません - それは数によって決定されます。 ビザカードは常に数字4で開始し、13または16桁の長さを持っています。 マスターカードは、その結果、長い番号16と51から55の範囲で始まり、我々は次の式を得ます:
注文を処理する前にさらにLuhnアルゴリズムで計算された番号の最後の桁を試験することができます。
確認の電話番号
タスク。 入力した電話番号の正しさを確認します。
決断。 固定・携帯電話番号の桁数が大幅ので普遍的、電話番号を正しく不可能正規表現を使用して確認し、国によって異なります。 しかし、国際的な数字は、厳格な形式とパターンを確認するための完璧なを持っています。 それ以上に、より多くの国民電話事業者が同じ標準を満たすためにしようとしていること。 次のように部屋の構造は次のとおりです。
+ CCC.NNNNNNNNNNxEEEE、ここで:
- C - 1-3桁からなる国コードです。
- N - 14桁までの数。
- E - オプションの拡張。
Plusは必要不可欠な要素であり、符号Xは、拡張子を必要なときにのみ存在しています。
その結果、私たちは次の式を持っています:
^ \ + [0-9] {1,3 } \ [0-9] {4,14}(?:X +。)$?
範囲内の数値
タスク。 特定の範囲の一致整数を確保する必要があります。 また、正規表現の範囲から数字だけを見つけることが必要です。
決断。 ここでは最も一般的な例いくつかのいくつかの表現は以下のとおりです。
| 1から24まで時間を決定します | ^(1 [0-2] | [1-9])$ |
| 月1-31日で | ^(3 [01] | [12] [0-9] | [1-9])$ |
| 数秒または数分0-59 | ^ [1-5]?[0-9] $ |
| 1から100までの数 | *(100 |?[1-9] [0-9])$ |
| 今年1〜366の日 | ^(36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |?[1-9] [0-9])$ |
検索IP-アドレス
タスク。 与えられた文字列が000.000.000.000-255.255.255.255の範囲のIPv4形式で有効なIPアドレスであるか否かを決定する必要があります。
決断。 PHPの言語のいずれかの問題と同じように、正規表現は、多くのvarintovを持っています。 たとえば、この:
式のオンライン・チェック
初心者のために正しく正規表現をチェックしているため、「通常の」プログラミング言語とは異なり、構文の複雑さと困難な場合があります。 この問題を解決するために、あなたは本当のテキストで作成したテンプレートの正しさを確認することが簡単に多くのオンラインテスターの表現があります。 プログラマは、表現や検証データを入力し、瞬時に処理結果を参照してください。 通常、正規表現、例と最も拡張言語のための実装の違いを詳細に本参考セクションは、そこにあります。
しかし、完全に信頼のオンラインサービスの結果にPHPを使用するすべての開発者にはお勧めできません。 正規表現が書かれており、人に検証し、資格を提起し、エラーがないことを保証しています。
Similar articles
Trending Now