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.

43 lines 4.5 kB
/** * Validator function for MAC addresses * * @description * Validates that the input value matches a valid MAC address format. * Supports both colon-separated (AA:BB:CC:DD:EE:FF) and hyphen-separated (AA-BB-CC-DD-EE-FF) formats. * * @example * ```typescript * // Basic usage in FormControl * const macControl = new FormControl('', [macAddressValidator()]); * * // Usage in reactive forms * this.deviceForm = this.fb.group({ * macAddress: ['', [Validators.required, macAddressValidator()]] * }); * * // Valid inputs: 'AA:BB:CC:DD:EE:FF', 'aa:bb:cc:dd:ee:ff', 'AA-BB-CC-DD-EE-FF' * // Invalid inputs: 'invalid-mac', 'AA:BB:CC:DD:EE', 'GG:HH:II:JJ:KK:LL' * ``` * * @returns ValidatorFn that returns null if valid, or validation error object if invalid * * @since 2.0.0 * @author Juvo Rafa Team */ export function macAddressValidator() { return (control) => { // Allow empty values (use Validators.required for required validation) if (!control.value) return null; // MAC address pattern: 6 groups of 2 hex digits separated by : or - const macPattern = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/; const isValid = macPattern.test(control.value); return isValid ? null : { invalidMacAddress: { value: control.value, message: 'Invalid MAC address format. Use AA:BB:CC:DD:EE:FF or AA-BB-CC-DD-EE-FF format' } }; }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLWFkZHJlc3MudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL3ZhbGlkYXRvcnMvbWFjLWFkZHJlc3MudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLENBQUMsT0FBd0IsRUFBcUMsRUFBRTtRQUNyRSx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFaEMsb0VBQW9FO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLDJDQUEyQyxDQUFDO1FBRS9ELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLGlCQUFpQixFQUFFO2dCQUNqQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sRUFBRSwrRUFBK0U7YUFDekY7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogVmFsaWRhdG9yIGZ1bmN0aW9uIGZvciBNQUMgYWRkcmVzc2VzXG4gKiBcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdGVzIHRoYXQgdGhlIGlucHV0IHZhbHVlIG1hdGNoZXMgYSB2YWxpZCBNQUMgYWRkcmVzcyBmb3JtYXQuXG4gKiBTdXBwb3J0cyBib3RoIGNvbG9uLXNlcGFyYXRlZCAoQUE6QkI6Q0M6REQ6RUU6RkYpIGFuZCBoeXBoZW4tc2VwYXJhdGVkIChBQS1CQi1DQy1ERC1FRS1GRikgZm9ybWF0cy5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEJhc2ljIHVzYWdlIGluIEZvcm1Db250cm9sXG4gKiBjb25zdCBtYWNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbbWFjQWRkcmVzc1ZhbGlkYXRvcigpXSk7XG4gKiBcbiAqIC8vIFVzYWdlIGluIHJlYWN0aXZlIGZvcm1zXG4gKiB0aGlzLmRldmljZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAqICAgbWFjQWRkcmVzczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgbWFjQWRkcmVzc1ZhbGlkYXRvcigpXV1cbiAqIH0pO1xuICogXG4gKiAvLyBWYWxpZCBpbnB1dHM6ICdBQTpCQjpDQzpERDpFRTpGRicsICdhYTpiYjpjYzpkZDplZTpmZicsICdBQS1CQi1DQy1ERC1FRS1GRidcbiAqIC8vIEludmFsaWQgaW5wdXRzOiAnaW52YWxpZC1tYWMnLCAnQUE6QkI6Q0M6REQ6RUUnLCAnR0c6SEg6SUk6Sko6S0s6TEwnXG4gKiBgYGBcbiAqIFxuICogQHJldHVybnMgVmFsaWRhdG9yRm4gdGhhdCByZXR1cm5zIG51bGwgaWYgdmFsaWQsIG9yIHZhbGlkYXRpb24gZXJyb3Igb2JqZWN0IGlmIGludmFsaWRcbiAqIFxuICogQHNpbmNlIDIuMC4wXG4gKiBAYXV0aG9yIEp1dm8gUmFmYSBUZWFtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWNBZGRyZXNzVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSB8IG51bGwgPT4ge1xuICAgIC8vIEFsbG93IGVtcHR5IHZhbHVlcyAodXNlIFZhbGlkYXRvcnMucmVxdWlyZWQgZm9yIHJlcXVpcmVkIHZhbGlkYXRpb24pXG4gICAgaWYgKCFjb250cm9sLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBcbiAgICAvLyBNQUMgYWRkcmVzcyBwYXR0ZXJuOiA2IGdyb3VwcyBvZiAyIGhleCBkaWdpdHMgc2VwYXJhdGVkIGJ5IDogb3IgLVxuICAgIGNvbnN0IG1hY1BhdHRlcm4gPSAvXihbMC05QS1GYS1mXXsyfVs6LV0pezV9KFswLTlBLUZhLWZdezJ9KSQvO1xuICAgIFxuICAgIGNvbnN0IGlzVmFsaWQgPSBtYWNQYXR0ZXJuLnRlc3QoY29udHJvbC52YWx1ZSk7XG4gICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyBcbiAgICAgIGludmFsaWRNYWNBZGRyZXNzOiB7IFxuICAgICAgICB2YWx1ZTogY29udHJvbC52YWx1ZSwgXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIE1BQyBhZGRyZXNzIGZvcm1hdC4gVXNlIEFBOkJCOkNDOkREOkVFOkZGIG9yIEFBLUJCLUNDLURELUVFLUZGIGZvcm1hdCcgXG4gICAgICB9IFxuICAgIH07XG4gIH07XG59ICJdfQ==