Skip to content

Instantly share code, notes, and snippets.

@korzha
Last active September 15, 2022 17:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save korzha/8bbdb9cc8ae7f3e8d695c28edc45400d to your computer and use it in GitHub Desktop.
Save korzha/8bbdb9cc8ae7f3e8d695c28edc45400d to your computer and use it in GitHub Desktop.
//const pattern = 'XXXXXXXXXXXXIIXXXX'
const digitsRe = new RegExp('/^\d+$/')
function test(str) {
if (str.length == 0) return false
// part 1: check that first at most 12 characters are only numbers
let end = Math.min(12, str.length)
if !digitsRe.test(str.substring(0, end)) return false
// part 3: check that at most 4 characters after 12 digits and 2 any chars are only numbers
end = Math.min(12 + 2 + 4, str.length)
if str.length > 12 + 2 && !digitsRe.test(str.substring(12 + 2, end)) return false
return true
}
function test2(str) {
if (str.length == 0) return false
// part 1: check that first at most 12 characters are only numbers
let end = Math.min(12, str.length)
if (!hasOnlyDigits(str, 0, end)) return false
// part 3: check that at most 4 characters after 12 digits and 2 any chars are only numbers
end = Math.min(12 + 2 + 4, str.length)
if (str.length > 12 + 2 && !hasOnlyDigits(str, 12 + 2, end)) return false
return true
}
function hasOnlyDigits(str, start, end) {
for (let i = start; start < end; i++) {
const ch = str.charAt(i)
if (c < '0' || c > '9') return false
}
return true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment