Files
pezkuwi-common/packages/util/src/is/hex.ts
T
Satoshi Qazi MuhammedandClaude Opus 5.5 bebfcee609 Bring license headers to 2026
The header rule takes the current year as the end of the range, as upstream's
does; 581 sources still ended at 2025, which failed lint. Lint never ran to
completion here, so this went unseen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 19:21:45 +04:00

37 lines
988 B
TypeScript

// Copyright 2017-2026 @pezkuwi/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '../types.js';
export const REGEX_HEX_PREFIXED = /^0x[\da-fA-F]+$/;
export const REGEX_HEX_NOPREFIX = /^[\da-fA-F]+$/;
/**
* @name isHex
* @summary Tests for a hex string.
* @description
* Checks to see if the input value is a `0x` prefixed hex string. Optionally (`bitLength` !== -1) checks to see if the bitLength is correct.
* @example
* <BR>
*
* ```javascript
* import { isHex } from '@pezkuwi/util';
*
* isHex('0x1234'); // => true
* isHex('0x1234', 8); // => false
* ```
*/
export function isHex (value: unknown, bitLength = -1, ignoreLength?: boolean): value is HexString {
return (
typeof value === 'string' && (
value === '0x' ||
REGEX_HEX_PREFIXED.test(value)
)
) && (
bitLength === -1
? (ignoreLength || (value.length % 2 === 0))
: (value.length === (2 + Math.ceil(bitLength / 4)))
);
}