UNPKG

bson

Version:

A bson parser for node.js and the browser

45 lines (36 loc) 1.44 kB
/** * @internal * Removes leading zeros and explicit plus from textual representation of a number. */ export function removeLeadingZerosAndExplicitPlus(str: string): string { if (str === '') { return str; } let startIndex = 0; const isNegative = str[startIndex] === '-'; const isExplicitlyPositive = str[startIndex] === '+'; if (isExplicitlyPositive || isNegative) { startIndex += 1; } let foundInsignificantZero = false; for (; startIndex < str.length && str[startIndex] === '0'; ++startIndex) { foundInsignificantZero = true; } if (!foundInsignificantZero) { return isExplicitlyPositive ? str.slice(1) : str; } return `${isNegative ? '-' : ''}${str.length === startIndex ? '0' : str.slice(startIndex)}`; } /** * @internal * Returns false for an string that contains invalid characters for its radix, else returns the original string. * @param str - The textual representation of the Long * @param radix - The radix in which the text is written (2-36), defaults to 10 */ export function validateStringCharacters(str: string, radix?: number): false | string { radix = radix ?? 10; const validCharacters = '0123456789abcdefghijklmnopqrstuvwxyz'.slice(0, radix); // regex is case insensitive and checks that each character within the string is one of the validCharacters const regex = new RegExp(`[^-+${validCharacters}]`, 'i'); return regex.test(str) ? false : str; }