How to check if a string is base32 encoded in javascript

妖精的绣舞 提交于 2021-01-24 12:54:12

问题


I need to check if a geohash string is valid, so I need to check if it's a base32 or not.


回答1:


Base32 uses A-Z and 2-7 for the encoding, and adds a padding character = to get a multiple of 8 characters, so you can create a regex to see if the candidate string matches.

Using regex.exec a matching string will return the match information, a non-matching string will return null, so you can use an if to test whether a match is true or false.

Base32 encodings also must always be a length that is a multiple of 8, and are padded with enough = chars to make it so; you can check the length is correct by using 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");
}



回答2:


function isBase32(input) {
    const regex = /^([A-Z2-7=]{8})+$/
    return regex.test(input)
}

console.log(isBase32('ABCDE23=')) //true
console.log(isBase32('aBCDE23=')) //false

console.log(isBase32('')) //false
console.log(isBase32()) //false
console.log(isBase32(null)) //false

console.log(isBase32('ABCDE567ABCDE2==')) //true
console.log(isBase32('NFGH@#$aBCDE23==')) //false


来源:https://stackoverflow.com/questions/53600848/how-to-check-if-a-string-is-base32-encoded-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!