2017-03-08 10 views
2

ユーザーがフォームフィールドに間違った文字列を入力しないように制限しようとしています。AccessVBA正規表現にアクセス:入力マスク検証。文字列が繰り返しパターンのみで構成されているか確認してください

の形式が「1,2,54,765,43222」かどうかを確認しようとしています。 配列

  1. 厳密に正の整数
  2. コンマ
  3. 空間(␣)

であり、この配列回の未知数を繰り返すことができます。

私はとString Like機能を使用しようとしましたが、このパターンを繰り返す可能性について壁に頭をぶつけました。

私はまた、Regexパターンにも開いていますが、私には非常に限られた量の知識と理解があります。私はパターン"\d+, +""(\d+,)+"を試しましたが、これは正しいとは確信していません。

もう1つの解決策は、substringを使用して、指定された文字列の最初の3文字のパターンを1回検索し、最初の3文字を削除してこの動作を繰り返すことです。

あなたにいくつかの例を与える:

  • "1、2、3、4は" trueを返す
  • "1,2、3、4は" 偽
  • 「返す必要があり、3 、65!34" 1、3、2、4、5442は
  • falseを返す必要があります "" 私は私の説明が十分であると思います

trueを返す必要があります。

ありがとうございます。彼らは部分試合(abc 22, end"22, ")と第二のものを見つけますので、

答えて

3

の終わり、私は簡単な解決策があります。

1)は、まず、文字列全体を分割しました

numberArray = Split(YourSequence, ", ") 

今の場合、numberArrayは、整数トリングは、第二に、あなたがループ内でnumberArrayを反復処理し、特定の要素は任意の要素が変換できない場合は、あなたの答えはfalseであるとすることができます、IsNumeric機能を使用して数値に変換することができているかどうかを確認)、

2正しかったです出口ループ。

コードは簡単で正規表現は必要ありません。

+0

こんにちはMichal。ありがとう。別の非常に良い解決策。 – ahsoe

1

\d+, +(\d+,)+パターンは適切ではありません - あなたはアンカー(^$)を追加することで、前の問題を解決しても、まだ,が必要になります+文字列の最後に1つのスペース。あなたは

^\d+(?:, \d+)*$ 

を使用する必要が

regex demoを参照してください。

少なくとも1つのカンマが必要な場合は、+*の量指定子を1つ以上のグループ化されたサブパターンと一致させるために置き換えます。

詳細

  • ^ - 文字列の先頭
  • \d+から1桁以上
  • (?:, \d+)* -
    • ,の0+のシーケンス - コンマ
    • - 宇宙
    • \d+から1桁以上
  • $ - 文字列
+0

詳細が必要な場合はお知らせください。 –

+0

こんにちはWiktor。あなたの迅速で詳細な返答をありがとう。これは私が必要とするものです。 "12"はtrueを返します。したがって、1カンマは必要ありません。しかし、1つのこと:どういう意味ですか?(?:、\ d +)*部分ではどういう意味ですか? – ahsoe

+0

これは[*非キャプチャグループ*](http://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group-what-does-a-question-mark-followed-by -a-colon)は、サブパターンのグループ化にのみ使用され、キャプチャされた値はメモリバッファに格納されません。グループは定量化されており、取り込まれるテキストには関心がないため、ここでキャプチャグループを使用することには意味がありません。 –

関連する問題