作成日:2024年07月22日
値を正しく入力させる(2)

前回は数値入力についてでしたが、今回は文字列の入力です
文字列なら制限不要では?と思われるかも知れませんが、電話番号の入力など、用途に応じた制限が必要になる場合があります
ファイルメーカーでは正規表現が標準では使用できませんので、正規表現を使用しない方法、それからプラグインの正規表現を使用した方法をご説明します
尚、プラグインは色々ありますが、ここではMBSプラグインでの記述例となります
郵便番号を入力
郵便番号は桁数が固定で、3桁+ハイフン+4桁、ハイフンなしなら数字7桁で構成されています
※海外の郵便番号はここでは考えない事とします
まず、半角と全角が混在すると不便ですので、半角に限定します
方法としては、入力タイプを指定して半角入力に固定するのが簡単です

ただ、値のコピペなどでの全角入力などもありますので、スクリプトトリガを使って半角に置換する方法もあります

スクリプト
フィールド設定 [test::郵便番号; RomanHankaku ( test::郵便番号 )]
もう一歩踏み込んで、数字とハイフン以外を消してしまってもよいでしょう
スクリプト
フィールド設定 [test::郵便番号; Filter ( RomanHankaku ( test::郵便番号 ); "0123456789-" )]
そして最後に入力値の検証を行います
半角になっている前提で、フィールド設定内で「計算式で制限」します

計算式で制限
Case ( PatternCount ( 郵便番号; "-" ) = 0; Case ( Length ( 郵便番号 ) ≠ 7; false; 郵便番号 ≠ Filter ( 郵便番号; "0123456789" ); false; true ); PatternCount ( 郵便番号; "-" ) = 1; Case ( Length ( 郵便番号 ) ≠ 8; false; 郵便番号 ≠ Filter ( 郵便番号; "0123456789-" ); false; Position ( 郵便番号; "-"; 1; 1 ) ≠ 4; false; true ); false )
正規表現を使用すれば下記の様な記載で対応できます
計算式で制限
MBS( "RegEx.Match"; "^[0-9]{3}-?[0-9]{4}$"; 郵便番号; "caseless" )
他の方法として、郵便番号のリストを日本郵便からダウンロードし、それと一致しない郵便番号は許可しないなどの方法もあります
かなりの件数があるので容量が嵩む点、大口郵便番号が非公開の企業もあるなどの問題がありますが、郵便番号から住所を自動入力させるなどの拡張も可能です
電話番号を入力
半角に固定する点、数字とハイフン(国際電話登録ならプラス記号も)のみを使用する点は郵便番号と同様です
但し、書式については固定できません
固定電話では、市外局番と市内局番、加入者番号で構成されますが、市外局番と市内局番の桁数が固定ではありませんし、携帯電話では区切り位置の取り方が曖昧です
入力の検証としては、桁数と余分な文字が使用されていないかを調べる事になります
計算式で制限
Case ( PatternCount ( 電話番号; "-" ) = 0; Case ( Length ( 電話番号 ) ≠ 10 and Length ( 電話番号 ) ≠ 11; False; 電話番号 ≠ Filter ( 電話番号; "0123456789+" ); False; True ); PatternCount ( 電話番号; "-" ) = 2; Case ( Length ( 電話番号 ) ≠ 12 and Length ( 電話番号 ) ≠ 13; False; 電話番号 ≠ Filter ( 電話番号; "0123456789-+" ); False; True ); False )
他の方法として、市外局番のリストを総務省からダウンロードするなどし、それと比較する方法もありますが、市内局番や加入者番号は非公開ですので気休め程度の確認となってしまいます
長くなったので、今回はここまでとします
値を正しく入力させる(3)へ続きます
ちなみに、イメージイラストの解答は下記の通りです


以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください