/** * Regular Expression Patterns - Core Constants * * Regex patterns compartidos entre todos los proyectos del workspace. * * @module @core/constants/regex * @version 1.0.0 */ // ============================================================================ // EMAIL & AUTHENTICATION // ============================================================================ /** * Email validation pattern * Matches: user@example.com, user.name+tag@example.co.uk */ export const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; /** * Strong password pattern * Requirements: 8+ chars, 1 uppercase, 1 lowercase, 1 number, 1 special char */ export const STRONG_PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/; /** * Medium password pattern * Requirements: 8+ chars, 1 uppercase or lowercase, 1 number */ export const MEDIUM_PASSWORD_REGEX = /^(?=.*[a-zA-Z])(?=.*\d)[A-Za-z\d]{8,}$/; /** * Username pattern * Requirements: 3-30 chars, alphanumeric + underscore, starts with letter */ export const USERNAME_REGEX = /^[a-zA-Z][a-zA-Z0-9_]{2,29}$/; // ============================================================================ // IDENTIFIERS // ============================================================================ /** * UUID v4 pattern */ export const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; /** * UUID (any version) pattern */ export const UUID_ANY_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; /** * Slug pattern (url-friendly string) */ export const SLUG_REGEX = /^[a-z0-9]+(?:-[a-z0-9]+)*$/; // ============================================================================ // PHONE NUMBERS // ============================================================================ /** * International phone number (E.164 format) */ export const PHONE_INTERNATIONAL_REGEX = /^\+?[1-9]\d{1,14}$/; /** * Mexican phone number (10 digits) */ export const PHONE_MEXICO_REGEX = /^(\+?52)?[1-9]\d{9}$/; /** * US phone number */ export const PHONE_US_REGEX = /^(\+?1)?[2-9]\d{2}[2-9]\d{6}$/; // ============================================================================ // FINANCIAL // ============================================================================ /** * Credit card number (basic validation) */ export const CREDIT_CARD_REGEX = /^\d{13,19}$/; /** * CVV/CVC (3-4 digits) */ export const CVV_REGEX = /^\d{3,4}$/; /** * Currency amount (allows decimals) */ export const CURRENCY_AMOUNT_REGEX = /^\d+(\.\d{1,2})?$/; /** * Percentage (0-100 with optional decimals) */ export const PERCENTAGE_REGEX = /^(100(\.0{1,2})?|[0-9]{1,2}(\.\d{1,2})?)$/; // ============================================================================ // MEXICAN IDS // ============================================================================ /** * Mexican RFC (Tax ID) * Format: XXXX######XXX for companies, XXX######XXXX for individuals */ export const RFC_MEXICO_REGEX = /^([A-ZÑ&]{3,4})(\d{2})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([A-Z\d]{2})([A\d])$/i; /** * Mexican CURP (Unique Population Registry Code) */ export const CURP_MEXICO_REGEX = /^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z\d]\d$/i; /** * Mexican Postal Code (5 digits) */ export const POSTAL_CODE_MEXICO_REGEX = /^\d{5}$/; // ============================================================================ // NETWORK // ============================================================================ /** * IPv4 address */ export const IPV4_REGEX = /^(?:(?: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]?)$/; /** * IPv6 address (simplified) */ export const IPV6_REGEX = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/; /** * MAC address */ export const MAC_ADDRESS_REGEX = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/; /** * URL (http, https) */ export const URL_REGEX = /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/; /** * Domain name */ export const DOMAIN_REGEX = /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/; // ============================================================================ // DATES & TIMES // ============================================================================ /** * Date (YYYY-MM-DD) */ export const DATE_REGEX = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/; /** * Time (HH:MM:SS or HH:MM) */ export const TIME_REGEX = /^([01]\d|2[0-3]):([0-5]\d)(:([0-5]\d))?$/; /** * ISO 8601 datetime */ export const ISO_DATETIME_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[+-]\d{2}:\d{2})?$/; // ============================================================================ // COLORS // ============================================================================ /** * Hex color (#RGB or #RRGGBB) */ export const HEX_COLOR_REGEX = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; /** * RGB color */ export const RGB_COLOR_REGEX = /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/; /** * RGBA color */ export const RGBA_COLOR_REGEX = /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0?\.\d+)\s*\)$/; // ============================================================================ // TEXT PATTERNS // ============================================================================ /** * Alphanumeric only */ export const ALPHANUMERIC_REGEX = /^[a-zA-Z0-9]+$/; /** * Alphabetic only */ export const ALPHABETIC_REGEX = /^[a-zA-Z]+$/; /** * Numeric only */ export const NUMERIC_REGEX = /^\d+$/; /** * No special characters (alphanumeric + spaces) */ export const NO_SPECIAL_CHARS_REGEX = /^[a-zA-Z0-9\s]+$/; /** * HTML tags */ export const HTML_TAG_REGEX = /<[^>]*>/g; /** * Multiple spaces */ export const MULTIPLE_SPACES_REGEX = /\s+/g; // ============================================================================ // FILE PATTERNS // ============================================================================ /** * File extension */ export const FILE_EXTENSION_REGEX = /\.([a-zA-Z0-9]+)$/; /** * Image file extensions */ export const IMAGE_EXTENSION_REGEX = /\.(jpg|jpeg|png|gif|webp|svg|bmp|ico)$/i; /** * Document file extensions */ export const DOCUMENT_EXTENSION_REGEX = /\.(pdf|doc|docx|xls|xlsx|ppt|pptx|txt|csv)$/i; /** * Video file extensions */ export const VIDEO_EXTENSION_REGEX = /\.(mp4|avi|mov|wmv|flv|mkv|webm)$/i; /** * Audio file extensions */ export const AUDIO_EXTENSION_REGEX = /\.(mp3|wav|ogg|flac|aac|wma)$/i; // ============================================================================ // HELPERS // ============================================================================ /** * Test if string matches pattern */ export const testPattern = (pattern: RegExp, value: string): boolean => { return pattern.test(value); }; /** * Extract matches from string */ export const extractMatches = ( pattern: RegExp, value: string, ): RegExpMatchArray | null => { return value.match(pattern); }; /** * Replace all matches in string */ export const replaceAll = ( pattern: RegExp, value: string, replacement: string, ): string => { return value.replace(pattern, replacement); };