diff --git a/package-lock.json b/package-lock.json index 7ea5880..71038ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3591,9 +3591,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { diff --git a/src/form/index.ts b/src/form/index.ts index eb0c142..63f2960 100644 --- a/src/form/index.ts +++ b/src/form/index.ts @@ -14,6 +14,7 @@ import * as email from './validators/email'; import * as minLength from './validators/min-length'; import * as maxLength from './validators/max-length'; import * as noEmptySpaces from './validators/no-empty-spaces'; +import * as zip from './validators/zip'; // Prepare validators. const validators = [ @@ -22,6 +23,7 @@ const validators = [ minLength, maxLength, noEmptySpaces, + zip, ]; /** diff --git a/src/form/validators/zip.ts b/src/form/validators/zip.ts new file mode 100644 index 0000000..1c2a543 --- /dev/null +++ b/src/form/validators/zip.ts @@ -0,0 +1,38 @@ +/** + * Internal dependencies. + */ +import { TPFormFieldElement } from '../tp-form-field'; +import { TPFormValidator } from '../definitions'; +import { getErrorMessage } from '../utility'; + +/** + * Name. + */ +export const name: string = 'zip'; + +/** + * Error message. + */ +export const errorMessage: string = 'Please enter a valid zip code'; + +/** + * Validator. + */ +export const validator: TPFormValidator = { + validate: ( field: TPFormFieldElement ): boolean => { + // Get the field value or default to empty string. + const value = field.getField()?.value ?? ''; + + // Get custom regex pattern from regex attribute or use default. + const customPattern: string | null = field.getAttribute( 'regex' ); + const defaultPattern: string = '^[A-Za-z0-9][A-Za-z0-9\\- ]{1,8}[A-Za-z0-9]$'; + const pattern: string = customPattern ?? defaultPattern; + + // Create regex object from pattern. + const zipCodeRegex: RegExp = new RegExp( pattern ); + + // Test the trimmed value against the regex pattern. + return zipCodeRegex.test( value.trim() ); + }, + getErrorMessage: (): string => getErrorMessage( name ), +};