1

前回の質問の続きです...

テキスト形式をテストした後、それが正しい形式でない場合、どの 16 進数値のペアが正しくないか (つまり、[0-9A-Fa-f] 以外の値を含むペア) を特定したいと思います。

if( validFormat ) {
// do processing
}
else {
// find invalid hex value pairs
}

エラーとそれに関連する 16 進数のペアを報告できるように、正しくない (無効な) 16 進数のペアのリストを取得する最も効率的な方法は何ですか。

追加の質問のために編集

また、16 進数のペアが有効である場合でも、無効な形式を構成するため、どこにも「ダブルスペース」がないことを確認するためにテストを行うにはどうすればよいでしょうか。

ありがとう!

4

2 に答える 2

1

最も簡単な方法は、すべての値を見つけて、無効なものをスキャンすることです。

var isHexPair = /^[0-9a-f]{2}$/i;
var allPairs = myTextArea.value.split(/\s+/);
var notHex   = [];
for (var i=allPairs.length;i--;){
  if (!isHexPair.test(allPairs[i])){
    notHex.push(allPairs(i));
  }
}

その正規表現は次のように述べています。

  • ^文字列の先頭から
  • [0-9a-f]数字または af である任意の文字を検索します
  • {2}それらのうちの正確に2つを見つける
  • $文字列の最後にいることを確認します
  • i大文字と小文字を区別しないようにします(AFと同様にAFを許可します)

上記を使用すると、次のことができます。

if (notHex.length){
  // There is at least one invalid entry
}else{
  // all is well
}

編集:文字列に単一のスペースで区切られたシングルバイトの16進文字列のみが含まれていることを明示的にテストしたい場合、最も簡単なテストは次のとおりです。

if (/^([0-9a-f]{2} )+[0-9a-f]{2}$/i.test(myStr)){ /* valid! */ }
于 2012-09-11T17:34:41.613 に答える
0

テキスト領域の値を取得しvar、スペースで区切られているため.splt(" ")(空白で分割) に格納すると、16 進数のペアの配列になります。次に、ループ内を最後の質問の正規表現と比較して配列を反復処理し、無効なペアを新しいものに保存しvarて、それをユーザーに出力します。

于 2012-09-11T17:37:45.313 に答える