2012-12-15 81 views
0

我正在設計一個使用Google腳本的表單。我有兩個文本框需要保存時間值,我想確保輸入有效。谷歌用戶界面腳本validateMatches不起作用,validateNotMatches確實

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 
} 

任何想法可能是怎麼回事?謝謝!

回答

1

您不能使用validateMatches或validateNotMatches一個正則表達式對象..你應該使用正則表達式的字符串表示,因爲這樣的:

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

...

.validateMatches(widget, timeRe, flags) 
+1

這做到了, 謝謝! (這有助於我正確閱讀文檔...) –