数値バリデーター

文字列値 (JSF 数値として フォーマットしたもの)、 または JavaScript™ の 数値オブジェクトをテストして、JSF 妥当性検査の 一連の制約に準拠しているかどうかを調べます。

NumberValidator を使って、 ある値が妥当性検査の一連の制約に準拠しているかどうかを テストします。 バリデーターを使って、JavaScript の 数値のテストを行うこともできますし、 付属の NumberConverter によって 数値に変換された文字列のテストも 行うことができます (変換が失敗すると、その値は無効になります)。

バリデーターの構成時に、妥当性検査の制約を 指定します (Get/SetAttribute 呼び出しを使用して、 制約の追加/除去を行うこともできます)。 制約における数値を、すべて指定することができます。 制約を指定しないと、意味のある作業にはなりません。

制約として required を指定する場合 (かつ true に設定する場合)、 その値が非ヌルか (数値が提供されている場合)、 または空ではない文字列であること (文字列が指定されている場合) を、 バリデーターが要求します。 required が設定されない場合、 他のすべての制約に関係なく、 ヌル/空の文字列が有効な値と見なされます (つまり、 必須が設定されなければ、 「ヌル」は常に有効な値になります)。

制約として minimum-bound が指定された場合は、 対象となる値 (ヌルでない場合) が 指定された範囲以上である必要があります。 制約として maximum-bound が指定された場合は、 対象となる値は最大限の範囲以下である必要があります。

modulus が指定された場合は、 グループ化/小数点文字に関係なく、 その数値の桁がモジュラス・テスト内で使用されます。 最後の数字が、チェック・ディジットになります。 その他の数字は、モジュラス・アルゴリズムによって処理され、 チェック・ディジットに「加算」するかどうかのテストが行われます。 16 桁の数値が有効なクレジット・カード番号であることを確認する場合や、 口座番号のような数字を確認する場合に、この制約が使用できます。

JavaScript EL 式を使用すると、値が設定範囲内にあるかどうか、 値が不連続な範囲内にあるかどうか、 などをテストすることができます。 現在のところ、ページ上のある値を別の値と比較するために 使用することはできません。

妥当性検査の結果には影響しませんが、 以下の順序で制約をテストを行ってください。
  1. required
  2. minimum-bound
  3. maximum-bound
  4. constraint-expression
  5. modulus

JavaScript コンストラクター

hX_5.addValidator("id", new hX_5.NumberValidator(attributes)); 各部の意味は次のとおりです。

id

コンポーネントが付加される HTML タグの ID。

属性

表 1. 数値バリデーター

属性名

説明

required

required を指定した場合、 値をヌルや空ストリングにすることができなくなります。 required を指定しない場合、 値をヌルや空ストリングにすることができます。 また、他の検証制約はスキップされます。

minimum-bound

最小許容値。 ここでの制約は、yyyyMMddHHmmssSSS という フォーマットにする必要があります。 この場合、末尾のコンポーネントは省略できます。

maximum-bound

最大許容値。 ここでの制約は、yyyyMMddHHmmssSSS という フォーマットにする必要があります。 この場合、末尾のコンポーネントは省略できます。

modulus

IBM® モジュ ラス 10 (値は 10)、または IBM モジュラス 11 (値は 11) の セルフ・チェック・アルゴリズムで、値が合格する必要があります。 http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info/rzakc/rzakcmstdfcheck.htm を 参照してください (「M10/M10F」を検索してください)。

constraint-expression

満たす必要が ある JavaScript EL 式。 JavaScript EL 式 は、JSF EL 式とほぼ同じですが、以下の違いがあります。
  • 演算子を表す際に、「ストリング」形式の 演算子を使用することはできません (例えば、== は 使用できますが、.eq は使用できません)。
  • 参照可能な値は、@testValue (テスト中の値を表します) だけです。
  • @testValue 内の日付/時刻コンポーネント には、Java™ アクセサー を使用してアクセスできます。 具体的には、.date、.day、.hours、.minutes、.month、.seconds、.timezoneOffset、.time、.year が 使用できます。

API 呼び出し

表 2. API 呼び出し

API 呼び出し

説明

boolean = validate(value, converter)

値 (ストリングまたは 日付オブジェクトのいずれか) を検証します。 コンバーター・オブジェクト、またはコンバーターの ID のいずれかが必要です。 値が合格した場合は true が戻されます。 値が不合格の場合は false が戻され、lastError が設定されます。

string = lastError()

変換が失敗すると、 失敗の理由をローカライズされたストリングとして戻します。

object = setAttribute(attribute)

属性を設定します。 属性がすでに設定されたものである場合は、 その値を変更します。

string = getAttribute(attribute-name)

属性の現行値を取得します。

制限

サンプル・コード

入力フィールドのペアの値について、妥当性検査を行います。

 // $ ###,##0.00;($ ###,##0.00) のパターンでコンバーターを構成します
hX.addConverter("AZ", new hX.NumberConverter("pattern:$ ###,##0.00;($ ###,##0.00)", 
                  "strict:2", "locale:,.%‰-$"));
 // 0000,0000,0000,0000 のパターンでコンバーターを構成します
hX.addConverter("BZ", new hX.NumberConverter("pattern:0000,0000,0000,0000", 
                  "strict:2", "locale:--XXXX"));

 // フィールドが存在することと、そのフィールドが -100,000 と 100,000 の間にあり、かつゼロではないこととをチェックする、バリデーターを構成します
hX.addValidator("1Z", new hX.NumberValidator("required:true", 
    "constraint-expression:(@testValue >= -100000 && @testValue <= 100000 && @testvalue != 0)"));
 // フィールドが存在することと、そのフィールドが有効なクレジット・カード番号であることとをチェックする、バリデーターを構成します
hX.addValidator("2Z", new hX.NumberValidator("required:true", "modulus:10"));

 // 値のペアの妥当性検査を行います。
var x = document.getElementById("form1:textA");
var v = hX.getValidatorById("1Z");
if (!v.validate(x.value, "AZ")) alert ("ERROR: " + v.lastError());
x = document.getElementById("form1:textB");
v = hX.getValidatorById("2Z");
if (!v.validate(x.value, "BZ")) alert ("ERROR: " + v.lastError());

フィードバック