![](/img/trans.png)
[英]Check if a nested array contains any element of another nested array in JavaScript
[英]How to check if an element in an array is in another array? (nested for loops)
这绝对不是进行此验证的最佳方法,但此方法必须这样做。
即使我对 textArea 有有效的十六进制输入(例如 4A、3B 等),以下代码也会返回 false。
非常感谢任何帮助!
var userCode = [];
// Code below parses all of the data to one long string with no spaces in upper case.
var userCodeInput = document.getElementById("taProgramInput").value.split(" ").join("").toString().toUpperCase();
var hexChar = ["A", "B", "C", "D", "E", "F", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
var validHex;
// Populate the userCode array by looping through the userCodeInput's length.
for (i = 0; i < userCodeInput.length; i++) {
userCode[i] = userCodeInput[i];
}
// Compare each element of the userCode array with each valid hex character.
for (j = 0; j < hexChar.length; j++) {
for (k = 0; k < userCode.length; k++) {
if (hexChar[j] !== userCode[k]) {
validHex = false;
break;
} else {
validHex = true;
}
}
}
if (validHex === false) {
_StdOut.putText("Invalid hex, valid hex characters include A-F and/or 0-9");
} else {
// Accepted command
_StdOut.putText("Valid Hex")
}
这是一个可以为您执行此检查的简洁功能:
function isHex(userCode) {
var paresedUserCode = parseInt(userCode, 16);
return (paresedUserCode.toString(16) === userCode.toLowerCase())
}
我认为你已经让这变得更复杂了。 您可以替换用户输入中的所有非十六进制字符,并检查生成的字符串是否与原始字符串的长度相同。
下面是一个例子:
function validHex(value){ var onlyHex = value.toUpperCase().replace(/[^A-F0-9]/g, ""); return onlyHex.length == value.length; } checkBtn.onclick = function(){ console.log(validHex(hexInput.value)); }
<textarea id="hexInput"></textarea> <br> <button id="checkBtn">Check</button>
这可能不是那么有效,但它需要更少的代码并且更容易理解。
相反,如果您想使用数组方法,您可以遍历用户输入字符串中的每个字符,并检查这些字符中是否有任何一个不是可接受的十六进制字符。
下面是一个例子:
var hexArray = ["A", "B", "C", "D", "E", "F", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
var userInput = ....;
var validHex = userInput.length;// initially 'true' if the user has inputed something.
for(var i = 0; i < userInput.length; i++){
if(hexArray.indexOf(userInput[i]) == -1){ // not hex
validHex = false;
break;
}
}
您可以使用带有第二个参数的parseInt
函数并指定数字系统(它是数值,所以16
将代表十六进制)。 由于我在第一个循环(填充数组 userCode)中没有看到要点,因此我将在此处仅使用一个循环,但您仍然应该在这里了解要点。
var validHex = true;
for (var i = 0; i < userCodeInput.length; i++) {
if (!isValidHex(userCodeInput[i])) validHex = false;
}
function isValidHex(char) {
var decoded = parseInt(char, 16);
if (char.toString() === decoded.toString()) return true;
return false;
}
它应该在这里完成工作。 或者您可以在此处采用正则表达式方法:
function isValidHex(char) {
return /^[0-9A-F]+$/g.test(char);
}
您可以使用indexOf
:
let validHex = true;
for (let k = 0; k < userCode.length; k++) {
if (hexChar.indexOf(userCode[k]) === -1) {
validHex = false;
break;
}
}
您还可以尝试将十六进制字符串转换为 int:
let validHex = parseInt(userCodeInput, 16) !== NaN;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.