1

我之前的问题的延续......

在测试文本格式后,如果它不是正确的格式,我想找出哪些十六进制值对是不正确的(即任何包含 [0-9A-Fa-f] 以外的值的对)。

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

获取不正确(无效)十六进制对列表的最有效方法是什么,以便我可以报告错误及其相关的十六进制对。

编辑附加问题

另外,我将如何进行测试以确保任何地方都没有“双空格”,因为即使十六进制对可能有效,这也构成无效格式。

谢谢!

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}找到其中两个
  • $确保我们现在位于字符串的末尾
  • i并使其不区分大小写(允许 AF 和 af)

有了上述内容,您可以执行以下操作:

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

编辑:如果您明确想要测试字符串只包含由单个空格分隔的单字节十六进制字符串,那么最简单的测试就是:

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

获取文本区域的值并存储在 a 中,var因为它们是空格分隔的,在其上执行 a .splt(" ")(在空白处拆分),您将得到一个十六进制对数组。然后只需遍历循环内的数组与上一个问题中的正则表达式进行比较,并将无效对存储在一个新的中var并将其打印给用户。

于 2012-09-11T17:37:45.313 回答