UNPKG

juvo-rafa-library

Version:

A comprehensive Angular component library featuring real-world components and validators extracted from the Juvo Rafa backoffice application. Now with improved select components and bug fixes.

38 lines 4.17 kB
/** * Validator function for IPv4 addresses * * @description * Validates that the input value matches a valid IPv4 address format. * Supports standard IPv4 notation (e.g., 192.168.1.1, 10.0.0.1, 255.255.255.255). * * @example * ```typescript * // Basic usage in FormControl * const ipControl = new FormControl('', [ipAddressValidator()]); * * // Usage in reactive forms * this.networkForm = this.fb.group({ * serverIp: ['', [Validators.required, ipAddressValidator()]] * }); * * // Valid inputs: '192.168.1.1', '10.0.0.1', '127.0.0.1' * // Invalid inputs: '256.1.1.1', '192.168.1', 'invalid-ip' * ``` * * @returns ValidatorFn that returns null if valid, or validation error object if invalid * * @since 2.0.0 * @author Juvo Rafa Team */ export function ipAddressValidator() { return (control) => { // Allow empty values (use Validators.required for required validation) if (!control.value) return null; // IPv4 pattern: each octet must be 0-255 const ipv4Pattern = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; const isValid = ipv4Pattern.test(control.value); return isValid ? null : { invalidIpAddress: { value: control.value, message: 'Invalid IPv4 address format' } }; }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXAtYWRkcmVzcy52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21wb25lbnRzL3NyYy9saWIvdmFsaWRhdG9ycy9pcC1hZGRyZXNzLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxDQUFDLE9BQXdCLEVBQXFDLEVBQUU7UUFDckUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWhDLHlDQUF5QztRQUN6QyxNQUFNLFdBQVcsR0FBRyw2RkFBNkYsQ0FBQztRQUNsSCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLEVBQUUsQ0FBQztJQUNqSCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyoqXG4gKiBWYWxpZGF0b3IgZnVuY3Rpb24gZm9yIElQdjQgYWRkcmVzc2VzXG4gKiBcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdGVzIHRoYXQgdGhlIGlucHV0IHZhbHVlIG1hdGNoZXMgYSB2YWxpZCBJUHY0IGFkZHJlc3MgZm9ybWF0LlxuICogU3VwcG9ydHMgc3RhbmRhcmQgSVB2NCBub3RhdGlvbiAoZS5nLiwgMTkyLjE2OC4xLjEsIDEwLjAuMC4xLCAyNTUuMjU1LjI1NS4yNTUpLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQmFzaWMgdXNhZ2UgaW4gRm9ybUNvbnRyb2xcbiAqIGNvbnN0IGlwQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW2lwQWRkcmVzc1ZhbGlkYXRvcigpXSk7XG4gKiBcbiAqIC8vIFVzYWdlIGluIHJlYWN0aXZlIGZvcm1zXG4gKiB0aGlzLm5ldHdvcmtGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gKiAgIHNlcnZlcklwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBpcEFkZHJlc3NWYWxpZGF0b3IoKV1dXG4gKiB9KTtcbiAqIFxuICogLy8gVmFsaWQgaW5wdXRzOiAnMTkyLjE2OC4xLjEnLCAnMTAuMC4wLjEnLCAnMTI3LjAuMC4xJ1xuICogLy8gSW52YWxpZCBpbnB1dHM6ICcyNTYuMS4xLjEnLCAnMTkyLjE2OC4xJywgJ2ludmFsaWQtaXAnXG4gKiBgYGBcbiAqIFxuICogQHJldHVybnMgVmFsaWRhdG9yRm4gdGhhdCByZXR1cm5zIG51bGwgaWYgdmFsaWQsIG9yIHZhbGlkYXRpb24gZXJyb3Igb2JqZWN0IGlmIGludmFsaWRcbiAqIFxuICogQHNpbmNlIDIuMC4wXG4gKiBAYXV0aG9yIEp1dm8gUmFmYSBUZWFtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcEFkZHJlc3NWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9IHwgbnVsbCA9PiB7XG4gICAgLy8gQWxsb3cgZW1wdHkgdmFsdWVzICh1c2UgVmFsaWRhdG9ycy5yZXF1aXJlZCBmb3IgcmVxdWlyZWQgdmFsaWRhdGlvbilcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHJldHVybiBudWxsO1xuICAgIFxuICAgIC8vIElQdjQgcGF0dGVybjogZWFjaCBvY3RldCBtdXN0IGJlIDAtMjU1XG4gICAgY29uc3QgaXB2NFBhdHRlcm4gPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KSQvO1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpcHY0UGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIFxuICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgaW52YWxpZElwQWRkcmVzczogeyB2YWx1ZTogY29udHJvbC52YWx1ZSwgbWVzc2FnZTogJ0ludmFsaWQgSVB2NCBhZGRyZXNzIGZvcm1hdCcgfSB9O1xuICB9O1xufSAiXX0=