2017-08-24 9 views
1

私のJSPページでは、列の1つがHH:mm形式で示された時刻用であり、データ型がString(日付からサーバー内の文字列)。今、JqueryプラグインTableditを使用してインラインテーブルの行編集を適用しています。JavaScript RegExpはすべての有効な入力と無効な入力でfalseを返します

私は列を編集している間に、サーバーに送信する前にRegExpでチェックしています。

var inTime = []; 
 
var timeRegEx = new RegExp("^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-9]|0[0-9]|([1-5][0-9]))$"); 
 
inTime[1] = "14:34"; 
 
if (timeRegEx.test(inTime[1])) { 
 
    alert("Matched"); 
 
    //return true; 
 
} else { 
 
    alert("Not Mateched"); 
 
    //return false; 
 
}

私はいくつかのonilneリソースに正規表現の妥当性をチェックして、それが正しいです。

私の場合、すべての有効で無効な入力では、常にelseブロックに行きます。

さらに多くのことが、警告のinTime [1]の値を印刷している間です。正規表現の%3Aとそれはまた、働いていない。だから私もを置き換え14%3A13

を:それはのような出力を提供します。

私はどこが間違っているのか、正しい解決策は何かを教えてください。

編集:ここ

:%の3Aと解釈ので、これは問題を引き起こすかもしれません。

ここで、inTimeはテーブル行から値を取得する配列です。

+2

、私はそれが絶対的に正常に動作し、実行可能なスニペットにコードを置きます。より関連性の高いコードを表示し、コンソールでエラーを確認してください。値が '14%3A13'であれば、何らかの形でURLエンコードされているように見えます。それはなぜコードが失敗するのかを説明します。 –

+1

これを試してください: 'if(decodeURIComponent(timeRegEx。test(inTime [1]))){' – spanky

+1

'%3A'は ':'のhtmlエンティティで、文字列をデコードしてからregexでテストします。 – Toto

答えて

1

私は、配列変数のINtimeは、[1] HTMLテーブルからデータを取得することを疑問に述べたように。 %3Aとして、RegExpをテストするための問題が発生します。

@Spanky decodeURIComponent(timeRegEx.test(inTime [1]))を試すヒントを教えてください。

私は彼のソリューションをわずかに変更し、decodeURIComponent()をinTime [1]変数にのみ適用しました。これは私のために働いた。

ソリューションのコードスニペットは以下の通りです:

var inTime = []; 
 
var timeRegEx = new RegExp("^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-9]|0[0-9]|([1-5][0-9]))$"); 
 
inTime[1] = "14%3A34"; 
 
if (timeRegEx.test(decodeURIComponent(inTime[1]))) { 
 
    console.log("Matched"); 
 
    //return true; 
 
} else { 
 
    console.log("Not Mateched"); 
 
    //return false; 
 
}

0

あなたのニーズに合っていますか?

var regex = /^[12]?\d:[]\d$/, 
 
    tests = [ 
 
     '56:12', 
 
     '03:68', 
 
     '2:49', 
 
     '12:59', 
 
     '23:00', 
 
     'abcs', 
 
     '12,23' 
 
    ]; 
 
    
 
tests.forEach(test => { 
 
    var isValid = regex.test(test); 
 
    console.log(`is ${test} valid: ${isValid}`); 
 
});

+0

いいえ、それは私のために動作しません。 –

1

var inTime = []; 
 
var timeRegEx = new RegExp("^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-9]|0[0-9]|([1-5][0-9]))$"); 
 
inTime[1] = "14%A334"; 
 
if (decodeURIComponent(timeRegEx.test(inTime[1]))) { 
 
    console.log("Matched"); 
 
    //return true; 
 
} else { 
 
    console.log("Not Mateched"); 
 
    //return false; 
 
}

+0

これも機能しません。 –

+1

@AkshayPethani:エラーはスクリプトの別の部分から発生します。より多くの文脈を示すことができます。 – Toto

関連する問題