- ベストアンサー
ファイルメーカー(FileMaker)の関数を使って入力を制限
例えばファイルメーカーPro(FileMaker Pro 7.0v3)でメールアドレスのテキストフィールドを作成する場合。 入力できるテキストを40字(半角小文字a~z、半角0~9、半角アッ トマーク、半角ピリオド、半角ハイフン、半角アンダースコア)のみに制限する方法はありますか? ※メールアドレスはあくまでも一例です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ウチは5.5なんですが、 グローバルフィールド「AllowChar」を繰り返し40で作成。中身は許 可する文字を列記したもの 計算フィールド「AllowCharCount」を繰り返し40で作成。計算式は PatternCount(Extend(アドレス), AllowChar) 「アドレス」の制限を計算して求める Length(アドレス) =Sum(AllowCharCount) これでオッケーでした。
その他の回答 (2)
- optimizer
- ベストアンサー率66% (2/3)
単なる思いつきですが、まず、「@.-_」をSubstitute関数で削除します。 その結果、abcdefghijklmnopqrstuvwxyz0123456789が残ります。 これは、たとえば vp6o0zerhybt4f8s3umagj2knw5i71cdql9x と並んでいても1ワードです。 つまり、このワード数が2以上となるときにはあいだに「%$空白#あ」といった文字が含まれていることになります。 ところが、前後に「%$空白#」がある場合にはこの限りでないため、 Length ( LeftWords ( アドレス ; 1 ) ) - Length ( アドレス ) 等を用いてチェックします。 大文字の使用はLower関数またはUpper関数を使用して一致不一致でチェックできます。 これらすべてがANDで満たされればOKとなります。 ただし詳細な検証をしておりません。誤りがあったらごめんなさい(単なる思いつきなので誤りがありそうな気がします)。
お礼
う~ん、なるほど…。 WordCountによるチェックまでは考えが及びませんでした。 さっそくテストしてみたところ正常に動くようです。 って言うか“Length(LeftWords(アドレス;1))-Length(アドレス)”あたりの関数がサラッと出てくるところを見るとかなりの上級者ですね。 しかしながら上記の方法で私が危惧する点は、 数多ある特殊キャラクタの特性をすべて把握できていないため、 記述した関数が期待どおりに動作するか確信が持てないことです。 例えば“ichiro.s”では“1”の値が返されるにも関わらず、 “ichiro^s”では“2”の値が返ってくるように、 私が予想していない特殊キャラクタを入力された場合は制限を通り抜けてしまう恐れがあるのです。 OS環境による認識方法の違いも完全には否定できませんしね…。 なので可能であるなら入力できないキャラクタをチェックする方法よりも、 入力できるキャラクタをビシッと指定する方法がないものかと苦慮している次第です。
- aqula
- ベストアンサー率60% (70/115)
フィールド定義 > オプション > 入力値の制限 > 計算式で制限 Filter ( メールアドレス;"abcdefghijklmnopqrstuvwxyz0123456789@.-_" ) = メールアドレス でどうですか?他にも手はありそうですけど…
お礼
いやいや…。それではダメです…。 その関数では任意の文字列の中から「abcdefghijklmnopqrstuvwxyz0123456789@.-_」と言う文字列だけを取り出すことになります。 私が考えた中で一番実現性があると思ったのは、 別に多数のテキストフィールド(メールアドレス_001~100)を作成して、 メールアドレスの文字列を先頭から一文字ずつ自動入力で取り出す方法です。 この方法でテキストフィールド(メールアドレス_001~100)に値一覧(abcdefghijklmnopqrstuvwxyz0123456789@.-_)の制限をかければ、 上記の40文字以外のテキストが入力できなくなると思ったのですが、 当然多数(あるいは無限?)のテキストフィールドが必要になりデータベースが複雑になってしまいますし、 何より値一覧では“ハイフン”の入力が出来ないので断念しました。 (しかし上記の方法も文字数が少ないテキストフィールドに限れば使えそうですね♪) やはり「PatternCount」で入力できない文字を全て禁止した方が良いのでしょうか…。
お礼
師匠と呼ばせてください!m(_ _)m