序
前回の記事では、テキスト入力ボックスが空欄になっていたり、指定した日時を過ぎていたりする場合に、送信ボタンを押せなくする方法を紹介しました。
今回はその続編として、入力された文字の種類によって送信ボタンを制御する方法を紹介します。例えば、社員番号などを入力する際に半角数字だけを許可したい場合や、特定の記号を含むファイルを保存できないように設定したい場合などです。
こうした入力内容の判定には、IsMatch 関数を使用すると便利です。また、入力内容に問題があった場合、単にボタンを押せなくするだけでなく、テキストラベルなどを組み合わせて注意メッセージを表示することも可能です。
1. IsMatch 関数
IsMatch 関数は、指定した文字列が、あらかじめ設定したパターンに一致するかを判定する関数です。判定結果は true または false で返され、基本文法は以下の通りです。
IsMatch(文字列, パターン, オプション)
この関数の3つの引数には「役割」があります。引数とは、関数に渡してあげる情報のことを指しており、表にまとめると以下の通りです。
| 引数 | 役割 |
|---|---|
| 第一引数:文字列 | 判定したい文字列を指定する |
| 第二引数:パターン | どのような文字列に一致するかを指定する |
| 第三引数:オプション | 文字列をどのような方法で照合するかを指定する |
1.1. 第一引数 : 判定したい文字列
第一引数には、判定の対象となる文字列を指定します。多くの場合、ユーザーによる入力を判定するため、対象となる「テキスト入力(txtInput)」の名前に .Text を付けて指定すると良いです。
txtInput.Text
「フォーム(編集フォーム)」を使っている場合は、DataCardValue3 といった名前になっているはずなので、次のように指定するとよいと思います。
DataCardValue3.Text
対象のコントロール(部品名)は、ツリービューから確認できるため、手元の部品名を確認した上で設定するとよいでしょう。
1.2. 第二引数 : 判定する文字列のパターン
第二引数には、どのような文字列に一致するかを指定します。ここでは「正規表現」という仕組みを使用するのがほとんどです。例えば、次の正規表現を考えてみましょう。
[0-9]+
[0-9] は半角数字1文字、+ は直前のパターンが1回以上続くことを意味します。つまり、[0-9]+ は半角数字(0 から 9 までの半角数字)が1文字以上続くことを表しています。
このように、正規表現を使用すると、文字の種類や桁数などを組み合わせて、さまざまな入力形式を指定できます。よく使われる例を、次の表にまとめました。
| 正規表現 | 意味 |
|---|---|
[0-9]+ |
半角数字が1文字以上続く |
[0-9]+ |
全角数字が1文字以上続く |
[0-90-9]+ |
半角・全角数字が1文字以上続く(混在可) |
[A-Z]+ |
半角英大文字が1文字以上続く |
[a-z]+ |
半角英小文字が1文字以上続く |
[a-zA-Z0-9]+ |
半角英数字が1文字以上続く |
[0-9]{4} |
4桁の半角数字 |
[0-9]{3}-[0-9]{4} |
123-4567 のような郵便番号形式 |
例えば、次の数式では、入力された文字列が半角数字だけで構成されている場合に true が返されます。
IsMatch(TextInput1.Text, "[0-9]+")
なお、ここで紹介した正規表現は一例です。正規表現の詳しい書き方や特殊文字の意味については、別記事を必要に応じてご参照ください。
1.3. 第三引数 : 照合方法を指定する
第三引数には、文字列をどのような方法で照合するかを指定します。ここで使用するのが MatchOptions です。第二引数の設定を終えた後で ,(コンマ)を入力すると予測変換が現れるため、こちらを利用すると良いです。
例えば、入力された文字列全体が半角数字だけで構成されているかを調べたい場合と、半角数字が1文字でも含まれているかを調べたい場合では、照合の方法が異なります。委細は公式情報をご一読いただければよいと思いますが、主なオプションを表にすると以下の通りです。
| オプション | 意味 |
|---|---|
MatchOptions.Complete |
文字列全体がパターンに一致するか |
MatchOptions.Contains |
文字列の一部分にパターンが含まれているか |
MatchOptions.BeginsWith |
文字列の先頭がパターンに一致するか |
MatchOptions.EndsWith |
文字列の末尾がパターンに一致するか |
MatchOptions.IgnoreCase |
英字の大文字・小文字を区別せずに照合する |
第三引数は省略可能です。省略した場合、MatchOptions.Complete が適用されます
ここでは、特によく使う Complete と Contains を例に動作を確認してみます。次の数式は、入力された文字列全体が半角数字だけで構成されているかを判定します。
IsMatch(txtInput.Text, "[0-9]+", MatchOptions.Complete)
一方で、次の数式は、半角数字が1文字でも含まれているかを判定しています。含まれていない場合は false が返されます。
IsMatch(txtInput.Text, "[0-9]", MatchOptions.Contains)
第三引数は、第二引数で示した条件(正規表現)に対して、完全一致するのか、含むのか、その条件で始まるのか、終わるのか…といった照合の条件を関数に教えてあげるイメージで設定すると良いのではないかと思います。
2. 半角数字だけが入力された場合にボタンを無効にする
ここからは、実際に Power Apps で入力チェックを実装してみましょう。画面には「テキスト入力(txtInput)」と「ボタン(btnSubmit)」が配置されている状態です。
なお「テキストラベル(lblResult)」には、IsMatch 関数の結果が表示されるようにしています。このラベルに表示されている文字が false の時は、IsMatch 関数での判定の結果「問題なかった」ということで、ボタンを押せる仕組みになっています。
以下、判定結果が true の時はボタンが押せない、false の時はボタンを押せる…という処理を実装していきます。
ボタンの DisplayMode プロパティに、次の数式を設定してみましょう。
If(
IsMatch(
txtInput.Text,
"[0-9]+",
MatchOptions.Complete
),
DisplayMode.Disabled,
DisplayMode.Edit
)
この数式では、IsMatch 関数の判定結果が true の場合に DisplayMode.Disabled、false の場合に DisplayMode.Edit を指定しています。つまり、半角数字だけが入力されている場合、ボタンを押せないようになります。
一方、半角数字以外の文字を混在させてみると、次のようにボタンを押せるようになります。こういう感じで入力を制御することによって、ユーザーに対して正確なデータ入力を求めることができます。
このように、正規表現(第二引数)と、MatchOptions(第三引数)の組み合わせ次第で、様々な入力のルールを反映させられます。
3. 禁止記号が含まれていたらボタンを無効にする
特定の記号が含まれている場合に、ボタンを押せなくする方法も紹介しましょう。例えば、取引先の正式名称などを入力する欄で、システムの都合により次の記号を使用できないと仮定します。
. ~ % & " ' \ < > ? / |
この場合は、禁止記号が1つでも含まれているか否かを判定することで、ユーザーに対して正確なデータ入力を求められます。IsMatch 関数の書き方は次の通りです。
IsMatch(txtInput.Text, "[.~%&""'\\<>?/|]", MatchOptions.Contains)
要点は、MatchOptions.Contains を指定していることです。例えば、テスト という文字列には禁止記号が含まれていないため、結果は false、テスト. には半角ピリオドが含まれているため true になります。
また、正規表現を記述する際は、一部の記号の扱いに注意が必要です。 例えば、数式の文字列内で二重引用符を表す場合は "" と重ねて記述する必要があり、バックスラッシュそのものを照合する場合は \\ と、こちらも重ねて記述しなければなりません。ヤヤコシイ
続いて、ボタンの DisplayMode プロパティに次の数式を記入します。先ほど設定した If 関数の第一引数(条件を設定する項目)を以下の数式で置き換えるだけです。
If(
IsMatch(
txtInput.Text,
"[.~%&""'\\<>?/|]",
MatchOptions.Contains
),
DisplayMode.Disabled,
DisplayMode.Edit
)
プレビュー画面に切り替えて入力テストしてみると、禁止文字を含んでいない場合のみボタンを押せるようになったはずです。
4. 複数の条件を組み合わせる
先ほどの数式は、禁止記号が1文字でも含まれている場合に限り、ボタンを押せないように設定するものでした。特殊記号が入力されていない、つまり、何も入力していない場合でもボタンを押せる仕様であるともいえます。
ここで If 関数に「入力内容が空欄になっているとき」という条件を追加します。ここで使用するのが IsBlank 関数です。数式は次の通りです。
If(
IsBlank(txtInput.Text) || IsMatch(
txtInput.Text,
"[.~%&""'\\<>?/|]",
MatchOptions.Contains
),
DisplayMode.Disabled,
DisplayMode.Edit
)
結果を確認してみると、何も入力していない場合もボタンを押せないように設定できました(追記部分を反転させています)
さらに、Trim 関数を使用することで、空白だけが入力されている場合も未入力として扱いやすくもできます。Trim 関数は、文字列の先頭と末尾から空白文字を除去する関数です(公式情報)
If(
IsBlank(Trim(TextInput1.Text)) ||
IsMatch(
TextInput1.Text,
"[.~%&""'\\<>?/|]",
MatchOptions.Contains
),
DisplayMode.Disabled,
DisplayMode.Edit
)
代わり映えはしませんが、結果も以下に付しておきましょう。数式の追記部分は反転させています。
結
今回は、Power Apps の IsMatch 関数を使って、半角数字の入力や禁止記号の検出を例に、ボタンを押せなくする設定についてまとめました。これを応用すると、特定の記号が入力された場合に限り、注意表示を出すこともできます(が、正直そこまでする必要はあるのかな…という疑問は抱いています)
入力チェックは、誤ったデータの登録を防ぐだけでなく、利用者が迷わず操作するための仕組みでもあります。まずは簡単な条件から試し、必要に応じて少しずつ組み合わせてみるとよいのではないでしょうか。














