Как проверить, если строка в кодировке base32 в javascript - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужно проверить, допустима ли строка геохеша, поэтому мне нужно проверить, является ли она base32 или нет.

1 Ответ

0 голосов
/ 03 декабря 2018

Base32 использует AZ и 2-7 для кодирования и добавляет дополнительный символ =, чтобы получить кратное 8 символов, так что вы можете создать регулярное выражение, чтобы увидеть, соответствует ли строка-кандидат.

При использовании regex.exec соответствующая строка вернет информацию о совпадении, несоответствующая строка вернет null, поэтому вы можете использовать if, чтобы проверить, является ли совпадение истинным или ложным.

Кодировки Base32 также всегда должны иметь длину, кратную 8, и дополнены достаточным количеством символов =, чтобы сделать это;Вы можете проверить правильность длины, используя mod 8 -
if (str.length % 8 === 0) { /* then ok */ }

// A-Z and 2-7 repeated, with optional `=` at the end
let b32_regex = /^[A-Z2-7]+=*$/;

var b32_yes = 'AJU3JX7ZIA54EZQ=';
var b32_no  = 'klajcii298slja018alksdjl';
    
if (b32_yes.length % 8 === 0 &&
    b32_regex.exec(b32_yes)) {
    console.log("this one is base32");
}
else {
    console.log("this one is NOT base32");
}
    
if (b32_no % 8 === 0 &&
    b32_regex.exec(b32_no)) {
    console.log("this one is base32");
}
else {
    console.log("this one is NOT base32");
}
...