0

Google Scripting を使用してフォームを設計しています。時間値を保持する必要がある 2 つのテキスト ボックスがあり、入力が有効であることを確認したいと考えています。

function setupTimeValidators(widget) {
  var timeRe = /(0[1-9])|(1[0-2]):[0-5][0-9] ?[ap]m/i;

  var onValid = (UiApp.getActiveApplication().createClientHandler()
                 .validateMatches(widget, timeRe)
                 .forTargets(widget)
                 .setStyleAttribute("background", "#FFFFFF"));


  var onInvalid = (UiApp.getActiveApplication().createClientHandler()
                   .validateNotMatches(widget, timeRe)
                   .forTargets(widget)
                   .setStyleAttribute("background", "#FFCCCC"));

  widget.addKeyUpHandler(onValid);
  widget.addKeyUpHandler(onInvalid);
}

テキストボックスに入力を開始するとすぐに、onInvalidパーツはテキストボックスの背景色を変更しますが、に到達しても白に戻ることはありません01:11 pm。(私はこれを他の値でテストしました。)

次のようにテストしたので、正規表現が機能すると確信しています。

function test() {
  Browser.msgBox(/(0[1-9])|(1[0-2]):[0-5][0-9] ?[ap]m/i.test("01:11 pm")); // true
  Browser.msgBox(/(0[1-9])|(1[0-2]):[0-5][0-9] ?[ap]m/i.test("00:11 pm")); // false
  Browser.msgBox(/(0[1-9])|(1[0-2]):[0-5][0-9] ?[ap]m/i.test("10:11 pm")); // true
  Browser.msgBox(/(0[1-9])|(1[0-2]):[0-5][0-9] ?[ap]m/i.test("10:90 pm")); // false
}

何が起こっているのでしょうか?ありがとう!

4

1 に答える 1

1

次のように、validateMatches または validateNotMatches で正規表現オブジェクトを使用することはできません。正規表現の文字列表現を使用する必要があります。

var timeRe = "(0[1-9])|(1[0-2]):[0-5][0-9] ?[ap]m";
var flags = "i";

...

.validateMatches(widget, timeRe, flags)
于 2012-12-15T22:56:56.897 に答える