这绝对不是进行此验证的最佳方法,但此方法必须这样做。
即使我对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")
}
答案 0 :(得分:0)
这是一个简洁的功能,可以为您检查:
function isHex(userCode) {
var paresedUserCode = parseInt(userCode, 16);
return (paresedUserCode.toString(16) === userCode.toLowerCase())
}
我根据你的命名风格命名变量,但作为奖励提示,我要补充一点,使用这样的大写字母更适合于函数名而不是变量名,这使代码更难读取。
答案 1 :(得分:0)
我认为你已经让它变得更复杂了。 您可以替换用户输入中的所有非十六进制字符,并检查结果字符串是否与原始字符串具有相同的长度。
以下是一个例子:
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;
}
}
答案 2 :(得分:0)
您可以将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);
}
答案 3 :(得分:0)
您可以使用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;