PHPの入力フィルタリング

入力フィルタリング(php)の構成についての考えを共有したいと思います。



最初の考えは、標準型用のラッパークラスString、Integer、Float、Arrayの開発です。 これらのクラスは、入力データフィルターでの使用だけでなく、文字列、配列などのより便利な作業を目的としています。



例:

function test ( TFloat $a , TInteger $b ) {

}



//

test ( new TFloat( $_POST [ 'price' ]), new TInteger ( $_POST [ 'count' ]) );







コンストラクターのTFloat、TIntegerクラスは、いくつかの型変換操作を実行します。 たとえば、TFloatは、文字「、」を「。」に置き換えます。TFloatおよびTIntegerは、すべての非数字文字も削除します(TFloatはe +-を残します)。



しかし、いくつかの「ベース」クラスで管理することは困難です。異なる場合、同じTInteger型に追加の制限を課すことができるためです-たとえば、「最小(0)」、「範囲(2.10)」、「最大(5)」。 TStringの場合-「最小長(5)」、「regexp(/.../)」など



したがって、2番目の考えは、各基本タイプの追加のフィルター機能でした。



例:

TString:

- min #

- max #

- range # (min, max)

- match #







フィルタはtrue | falseを返す必要があります。これにより、検証ロジックを構築できます。 フィルタを使用して、独自のタイプを設計することもできます。



例:

Login :

TString :

#

# ""

- trim, toLowerCase

#

# ( !),

# ?

# error(some text) -

- ! match(/[a-z0-9_]/i) ? error( az, 0-9, _)



Password :

TString :

# /

- ! min(5) ? error( 5 )

- ! match(/[a-z0-9_]/i) ? error( az, 0-9, _)



Email :

TString :

- trim, toLowerCase

- ! match(/e-mail-regexp/) ? error(E-mail )







さらに、コードでは新しい型が使用されます(上記の構成に基づいてクラスが自動的に生成され、自動ロードメカニズムによってロードされる必要があります)。

<br/> function register( Login $login , Password $password , Password $confirm_password , Email $email ) {

<br/>}







ただし、この場合、追加のチェックが必要です。たとえば、$ passwordと$ confirm_passwordは同一でなければなりません。

したがって、関数自体については追加の説明がすでに必要です。

User : #

register : #

params : #

login :

type : Login

filters :

- empty ? error( )

# callback -

# , true|false

- ! callback(User->isLoginUnique($login)) ? error( , )



password :

type : Password

filters :

- empty ? error( )

# eq

# post.confirm_password - POST,

# get.confirm_password - GET - /path?confirm_password=123

- ! eq(post.confirm_password) ? error( "" " " )



confirm_password :

type : Password

filters :

- empty ? error( o)







すべての設定構文はYamlです。 また、フィルターなどを記述する方法が特に成功しているとは思いませんが、それほど重要ではありません。書かれていることについてのあなたの考えは興味深いものです。



建設的なコメントと批判を歓迎します...



All Articles