ユーザ入力を扱うエレメント(CKTextFieldとCKText)では、validate
属性とpass
属性を使って入力値を検証することができます。入力値が検証にパスすればpass
属性の変数が真になりますが、そうでなければ偽が代入されます。
例としてメールアドレスを入力するテキストフィールドを検証します。入力したメールアドレスが存在するかどうかを調べるにはコードを書かないとできませんが、フォーマットを検証すればメールアドレスではないデータが入力されたかどうかわかります。
ここでは単純に@が含まれているかどうか検証することにします。もし@が含まれていなければ、変数pass_mail
にfalse
が代入されます。
Mail : CKTextField { value = mail validate = "mail =~ /[^@]+@(.+)/" pass = pass_mail }
この例はRegistrationアプリケーションとしてサンプルに含まれています。
ルールの例をいくつか示します。
name == ‘MyName’ (title =~ /R/) and (title.size > 10) not (count < 20)
基本的に「属性 オペレータ 条件」でルールを記述します(属性はコンポーネントで定義されているアクセサかインスタンス変数です)。複数のルールをつなげるにはand
/or
を、否定にするにはnot
を式の前に記述します。論理演算子を使うときは、式をかっこで囲んでください。
上記のうち、最後の例では属性を数値としてルールを設定しています。フォームデータは文字列として代入されますが、データの検証時は条件に合わせてデータ型が変換されます。例えば100以上500以下などのルールは以下のように記述します。
Number : CKTextField { value = number validate = “(number >= 100) and (number <= 500)“ pass = pass_number }
使用できるオペレータを次に示します。
オペレータ | 説明 |
---|---|
== |
両辺が同じ。 |
!= |
両辺が異なる。 |
> |
左辺が右辺より大きい。 |
< |
左辺が右辺より小さい。 |
>= |
左辺が右辺より大きいか、同じ。 |
<= |
左辺が右辺より小さいか、同じ。 |
=~ |
文字列のパターンマッチを行う。 |