rgex
Version:
A powerful, chainable regex builder platform with comprehensive validation utilities
1 lines • 66.2 kB
JavaScript
var q={EMAIL:"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$",URL:"^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$",PHONE:"^\\+?[1-9]\\d{4,14}$",DATE:"^\\d{4}-\\d{2}-\\d{2}$",TIME:"^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$",INTEGER:"^-?\\d+$",DECIMAL:"^-?\\d+(\\.\\d+)?$",POSITIVE_INTEGER:"^[1-9]\\d*$",POSITIVE_DECIMAL:"^([1-9]\\d*|0)(\\.\\d+)?$",UUID:"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",MONGO_ID:"^[0-9a-fA-F]{24}$",IPV4:"^(?:(?: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:"^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$",DOMAIN:"^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?.)+[a-zA-Z]{2,}$",MAC_ADDRESS:"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$",HEX_COLOR:"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",SLUG:"^[a-z0-9]+(?:-[a-z0-9]+)*$",USERNAME:"^[a-zA-Z0-9_]{3,20}$",FILE_EXTENSION:"^.*\\.[a-zA-Z0-9]{1,10}$",IMAGE_FILE:"^.*\\.(jpg|jpeg|png|gif|bmp|svg|webp|ico)$",DOCUMENT_FILE:"^.*\\.(pdf|doc|docx|txt|rtf|odt)$",TIMESTAMP:"^[0-9]{10,13}$",ISO_DATETIME:"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$",CREDIT_CARD:"^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3[0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12})$",VISA_CARD:"^4[0-9]{12}(?:[0-9]{3})?$",MASTERCARD:"^5[1-5][0-9]{14}$",AMEX:"^3[47][0-9]{13}$",PASSWORD:"^.{6,}$",STRONG_PASSWORD:`^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?]).{8,}$`,DIGITS_ONLY:"^\\d+$",LETTERS_ONLY:"^[a-zA-Z]+$",ALPHANUMERIC:"^[a-zA-Z0-9]+$",NO_SPACES:"^\\S+$",TEXT:`^[a-zA-Z0-9\\s.,!?;:'"-]+$`,US_ZIP_CODE:"^\\d{5}(-\\d{4})?$",CANADIAN_POSTAL_CODE:"^[A-Za-z]\\d[A-Za-z][ -]?\\d[A-Za-z]\\d$",UK_POSTCODE:"^[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}$",GERMAN_POSTCODE:"^\\d{5}$",FRENCH_POSTCODE:"^\\d{5}$",SSN:"^(?!666|000|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4}$",BASE64:"^[A-Za-z0-9+/]*={0,2}$",BITCOIN_ADDRESS:"^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$",ETHEREUM_ADDRESS:"^0x[a-fA-F0-9]{40}$",IBAN:"^[A-Z]{2}[0-9]{2}[A-Z0-9]{4,30}$",SWIFT_CODE:"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$",ISBN_10:"^(?:\\d{9}[\\dX]|\\d{10})$",ISBN_13:"^97[89]\\d{10}$",SEMVER:"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",JWT_TOKEN:"^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_.+/=]*$",GIT_COMMIT:"^[a-f0-9]{7,40}$",GITHUB_USERNAME:"^[a-z\\d](?:[a-z\\d]|-(?=[a-z\\d])){0,38}$",TWITTER_HANDLE:"^@?(\\w){1,15}$",DISCORD_ID:"^\\d{17,19}$",SLACK_USER_ID:"^U[A-Z0-9]{8,10}$",YOUTUBE_VIDEO_ID:"^[a-zA-Z0-9_-]{11}$",AWS_S3_BUCKET:"^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$",DOCKER_IMAGE:"^[a-z0-9]+(?:[._-][a-z0-9]+)*(?:\\/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-zA-Z0-9._-]+)?$",K8S_RESOURCE_NAME:"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",NPM_PACKAGE:"^(?:@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$",E164_PHONE:"^\\+[1-9]\\d{1,14}$",LINKEDIN_PROFILE:"^https:\\/\\/(www\\.)?linkedin\\.com\\/in\\/[a-zA-Z0-9-]+\\/?$",GOOGLE_DRIVE_ID:"^[a-zA-Z0-9-_]{25,}$",FIREBASE_PROJECT_ID:"^[a-z0-9-]{6,30}$",AZURE_RESOURCE_GROUP:"^[a-zA-Z0-9._()-]{1,90}$"},N={ipv6:{type:"custom",pattern:q.IPV6,description:"IPv6 address",examples:["2001:0db8:85a3:0000:0000:8a2e:0370:7334","::1"]},ipv4:{type:"custom",pattern:q.IPV4,description:"IPv4 address",examples:["192.168.1.1","127.0.0.1"]},macaddress:{type:"custom",pattern:q.MAC_ADDRESS,description:"MAC address",examples:["00:1B:44:11:3A:B7","00-1B-44-11-3A-B7"]},domain:{type:"custom",pattern:q.DOMAIN,description:"Domain name",examples:["example.com","subdomain.example.org"]},timestamp:{type:"custom",pattern:q.TIMESTAMP,description:"Unix timestamp",examples:["1640995200","1640995200000"]},datetime:{type:"custom",pattern:q.ISO_DATETIME,description:"ISO datetime format",examples:["2023-12-25T10:30:00Z","2023-12-25T10:30:00.123Z"]},time:{type:"time",pattern:q.TIME,description:"Time in HH:MM or HH:MM:SS format",examples:["14:30","09:15:30"]},ukpostcode:{type:"custom",pattern:q.UK_POSTCODE,description:"UK postcode",examples:["SW1A 1AA","M1 1AA","B33 8TH"]},germanpostcode:{type:"custom",pattern:q.GERMAN_POSTCODE,description:"German postcode",examples:["10115","80331","20095"]},frenchpostcode:{type:"custom",pattern:q.FRENCH_POSTCODE,description:"French postcode",examples:["75001","69001","13001"]},zipcode:{type:"custom",pattern:q.US_ZIP_CODE,description:"US ZIP code",examples:["12345","12345-6789"]},postalcode:{type:"custom",pattern:q.CANADIAN_POSTAL_CODE,description:"Canadian postal code",examples:["K1A 0A6","M5V 3L9"]},email:{type:"email",pattern:q.EMAIL,description:"Valid email address",examples:["user@example.com","test.email+tag@domain.co.uk"]},phone:{type:"phone",pattern:q.PHONE,description:"Phone number with optional country code",examples:["+1234567890","1234567890"]},url:{type:"url",pattern:q.URL,description:"HTTP or HTTPS URL",examples:["https://example.com","http://test.org/path"]},date:{type:"date",pattern:q.DATE,description:"Date in YYYY-MM-DD format",examples:["2023-12-25","2024-01-01"]},number:{type:"number",pattern:q.DECIMAL,description:"Integer or decimal number",examples:["123","-45.67","0.5"]},uuid:{type:"custom",pattern:q.UUID,description:"UUID (Universally Unique Identifier)",examples:["123e4567-e89b-12d3-a456-426614174000"]},guid:{type:"custom",pattern:q.UUID,description:"GUID (Globally Unique Identifier)",examples:["123e4567-e89b-12d3-a456-426614174000"]},hexcolor:{type:"custom",pattern:q.HEX_COLOR,description:"Hexadecimal color code",examples:["#ff0000","#f00"]},letters:{type:"text",pattern:q.LETTERS_ONLY,description:"Letters only (alphabetic characters)",examples:["abc","Hello","World"]},text:{type:"text",pattern:q.TEXT,description:"General text with letters, numbers, spaces, and common punctuation",examples:["hello world","Hello, World!","This is text."]},alphanumeric:{type:"text",pattern:q.ALPHANUMERIC,description:"Alphanumeric characters only (letters and numbers)",examples:["abc123","Test123","user1"]},password:{type:"custom",pattern:q.PASSWORD,description:"Basic password (minimum 6 characters)",examples:["password123","mypass"]},creditcard:{type:"custom",pattern:q.CREDIT_CARD,description:"Credit card number",examples:["4111111111111111","5555555555554444"]},visa:{type:"custom",pattern:q.VISA_CARD,description:"Visa credit card number",examples:["4111111111111111","4012888888881881"]},mastercard:{type:"custom",pattern:q.MASTERCARD,description:"Mastercard credit card number",examples:["5555555555554444","5105105105105100"]},username:{type:"text",pattern:q.USERNAME,description:"Username (3-20 characters, letters, numbers, underscores)",examples:["user123","john_doe","admin"]},ssn:{type:"custom",pattern:q.SSN,description:"US Social Security Number",examples:["123-45-6789","987-65-4321"]},fileextension:{type:"custom",pattern:q.FILE_EXTENSION,description:"File with extension",examples:["document.pdf","image.jpg","script.js"]},imagefile:{type:"custom",pattern:q.IMAGE_FILE,description:"Image file",examples:["photo.jpg","logo.png","icon.svg"]},documentfile:{type:"custom",pattern:q.DOCUMENT_FILE,description:"Document file",examples:["report.pdf","letter.doc","notes.txt"]}},S={email:["email","e-mail","mail address","@"],phone:["phone","telephone","mobile","cell"],url:["url","link","website","http","https","web address"],date:["date","yyyy-mm-dd","iso date"],number:["number","numeric","digit","integer","decimal"],uuid:["uuid","unique identifier"],guid:["guid","globally unique identifier"],ipv4:["ipv4","ipv4 address","ip v4","ip address"],hexcolor:["color","hex","hexadecimal","#","hex color"],letters:["letters only","alphabetic","letters","alpha","word"],text:["text","general text"],password:["password","pass","pwd"],creditcard:["credit card","creditcard","card number"],visa:["visa card","visa"],mastercard:["mastercard","master card"],username:["username","user name","handle"],ssn:["social security number","ssn","social security"],zipcode:["zip code","zipcode","zip"],postalcode:["canadian postal code","canada postal code","canadian postcode","postal code","postcode"],alphanumeric:["alphanumeric","alphanumeric characters","letters and numbers"],ipv6:["ipv6","ipv6 address","ip version 6","ip v6"],macaddress:["mac address","mac","hardware address","physical address"],domain:["domain","domain name","hostname"],fileextension:["file extension","file with extension","filename"],imagefile:["image file","image","picture file","photo file"],documentfile:["document file","document","text file"],timestamp:["timestamp","unix timestamp","epoch time"],datetime:["datetime","iso datetime","date time","timestamp iso"],time:["time format","hh:mm","hour","minute","time"],ukpostcode:["uk postcode","uk postal code","british postcode"],germanpostcode:["german postcode","german postal code","germany postcode"],frenchpostcode:["french postcode","french postal code","france postcode"]};var m=(J)=>`^${J.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}`,C=(J)=>`${J.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}$`,R=(J)=>`.*${J.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}.*`,A=(J)=>`^.{${J}}$`,_=(J)=>`^.{${J},}$`,I=(J)=>`^.{0,${J}}$`,f=(J,Y)=>`^.{${J},${Y}}$`;var v={required:()=>({name:"required",pattern:/.+/,message:"This field is required",validator:(J)=>J.trim().length>0}),email:()=>({name:"email",pattern:new RegExp(q.EMAIL),message:"Please enter a valid email address"}),phone:()=>({name:"phone",pattern:new RegExp(q.PHONE),message:"Please enter a valid phone number"}),url:()=>({name:"url",pattern:new RegExp(q.URL),message:"Please enter a valid URL"}),minLength:(J)=>({name:"minLength",pattern:new RegExp(`.{${J},}`),message:`Minimum length is ${J} characters`,validator:(Y)=>Y.length>=J}),maxLength:(J)=>({name:"maxLength",pattern:new RegExp(`^.{0,${J}}$`),message:`Maximum length is ${J} characters`,validator:(Y)=>Y.length<=J}),numbersOnly:()=>({name:"numbersOnly",pattern:new RegExp(q.DIGITS_ONLY),message:"Only numbers are allowed"}),lettersOnly:()=>({name:"lettersOnly",pattern:new RegExp(q.LETTERS_ONLY),message:"Only letters are allowed"}),alphanumeric:()=>({name:"alphanumeric",pattern:new RegExp(q.ALPHANUMERIC),message:"Only letters and numbers are allowed"}),noSpaces:()=>({name:"noSpaces",pattern:new RegExp(q.NO_SPACES),message:"Spaces are not allowed"}),strongPassword:()=>({name:"strongPassword",pattern:new RegExp(q.STRONG_PASSWORD),message:"Password must contain uppercase, lowercase, number, and special character"}),uuid:()=>({name:"uuid",pattern:new RegExp(q.UUID,"i"),message:"Please enter a valid UUID"}),ipAddress:()=>({name:"ipAddress",pattern:new RegExp(`(${q.IPV4})|(${q.IPV6})`),message:"Please enter a valid IP address"}),date:()=>({name:"date",pattern:new RegExp(q.DATE),message:"Please enter a valid date (YYYY-MM-DD)",validator:(J)=>{if(!new RegExp(q.DATE).test(J))return!1;let Y=new Date(J);return Y instanceof Date&&!isNaN(Y.getTime())}}),time:()=>({name:"time",pattern:new RegExp(q.TIME),message:"Please enter a valid time (HH:MM or HH:MM:SS)"}),hexColor:()=>({name:"hexColor",pattern:new RegExp(q.HEX_COLOR),message:"Please enter a valid hex color (#fff or #ffffff)"}),slug:()=>({name:"slug",pattern:new RegExp(q.SLUG),message:"Please enter a valid slug (lowercase letters, numbers, and hyphens only)"}),username:()=>({name:"username",pattern:new RegExp(q.USERNAME),message:"Username must be 3-20 characters long and contain only letters, numbers, and underscores"}),domain:()=>({name:"domain",pattern:new RegExp(q.DOMAIN),message:"Please enter a valid domain name"}),creditCard:()=>({name:"creditCard",pattern:new RegExp(q.CREDIT_CARD),message:"Please enter a valid credit card number"}),mongoId:()=>({name:"mongoId",pattern:new RegExp(q.MONGO_ID),message:"Please enter a valid MongoDB ObjectID"}),base64:()=>({name:"base64",pattern:new RegExp(q.BASE64),message:"Please enter a valid base64 encoded string",validator:(J)=>{try{return btoa(atob(J))===J}catch{return!1}}}),json:()=>({name:"json",pattern:/^[\s\S]*$/,message:"Please enter valid JSON",validator:(J)=>{try{return JSON.parse(J),!0}catch{return!1}}}),ssn:()=>({name:"ssn",pattern:new RegExp(q.SSN),message:"Please enter a valid Social Security Number (XXX-XX-XXXX)"}),zipCode:()=>({name:"zipCode",pattern:new RegExp(q.US_ZIP_CODE),message:"Please enter a valid ZIP code (12345 or 12345-6789)"}),postalCode:()=>({name:"postalCode",pattern:new RegExp(q.CANADIAN_POSTAL_CODE),message:"Please enter a valid postal code (A1A 1A1)"}),ukPostcode:()=>({name:"ukPostcode",pattern:new RegExp(q.UK_POSTCODE),message:"Please enter a valid UK postcode"}),fileExtension:()=>({name:"fileExtension",pattern:new RegExp(q.FILE_EXTENSION),message:"Please enter a valid file with extension"}),imageFile:()=>({name:"imageFile",pattern:new RegExp(q.IMAGE_FILE),message:"Please enter a valid image file (jpg, png, gif, etc.)"}),documentFile:()=>({name:"documentFile",pattern:new RegExp(q.DOCUMENT_FILE),message:"Please enter a valid document file (pdf, doc, txt, etc.)"}),timestamp:()=>({name:"timestamp",pattern:new RegExp(q.TIMESTAMP),message:"Please enter a valid timestamp"}),isoDateTime:()=>({name:"isoDateTime",pattern:new RegExp(q.ISO_DATETIME),message:"Please enter a valid ISO datetime (YYYY-MM-DDTHH:mm:ss.sssZ)"}),visaCard:()=>({name:"visaCard",pattern:new RegExp(q.VISA_CARD),message:"Please enter a valid Visa card number"}),masterCard:()=>({name:"masterCard",pattern:new RegExp(q.MASTERCARD),message:"Please enter a valid Mastercard number"}),amexCard:()=>({name:"amexCard",pattern:new RegExp(q.AMEX),message:"Please enter a valid American Express card number"}),macAddress:()=>({name:"macAddress",pattern:new RegExp(q.MAC_ADDRESS),message:"Please enter a valid MAC address (XX:XX:XX:XX:XX:XX)"}),bitcoinAddress:()=>({name:"bitcoinAddress",pattern:new RegExp(q.BITCOIN_ADDRESS),message:"Please enter a valid Bitcoin address"}),ethereumAddress:()=>({name:"ethereumAddress",pattern:new RegExp(q.ETHEREUM_ADDRESS),message:"Please enter a valid Ethereum address"}),iban:()=>({name:"iban",pattern:new RegExp(q.IBAN),message:"Please enter a valid IBAN code"}),swiftCode:()=>({name:"swiftCode",pattern:new RegExp(q.SWIFT_CODE),message:"Please enter a valid SWIFT/BIC code"}),isbn10:()=>({name:"isbn10",pattern:new RegExp(q.ISBN_10),message:"Please enter a valid ISBN-10 code"}),isbn13:()=>({name:"isbn13",pattern:new RegExp(q.ISBN_13),message:"Please enter a valid ISBN-13 code"}),semver:()=>({name:"semver",pattern:new RegExp(q.SEMVER),message:"Please enter a valid semantic version (X.Y.Z)"}),jwtToken:()=>({name:"jwtToken",pattern:new RegExp(q.JWT_TOKEN),message:"Please enter a valid JWT token"}),githubUsername:()=>({name:"githubUsername",pattern:new RegExp(q.GITHUB_USERNAME,"i"),message:"Please enter a valid GitHub username"}),twitterHandle:()=>({name:"twitterHandle",pattern:new RegExp(q.TWITTER_HANDLE),message:"Please enter a valid Twitter handle (max 15 characters)"}),discordId:()=>({name:"discordId",pattern:new RegExp(q.DISCORD_ID),message:"Please enter a valid Discord user ID"}),youtubeVideoId:()=>({name:"youtubeVideoId",pattern:new RegExp(q.YOUTUBE_VIDEO_ID),message:"Please enter a valid YouTube video ID"}),googleDriveId:()=>({name:"googleDriveId",pattern:new RegExp(q.GOOGLE_DRIVE_ID),message:"Please enter a valid Google Drive file ID"}),s3BucketName:()=>({name:"s3BucketName",pattern:new RegExp(q.AWS_S3_BUCKET),message:"Please enter a valid S3 bucket name (3-63 chars, lowercase)"}),dockerImage:()=>({name:"dockerImage",pattern:new RegExp(q.DOCKER_IMAGE),message:"Please enter a valid Docker image name"}),npmPackage:()=>({name:"npmPackage",pattern:new RegExp(q.NPM_PACKAGE),message:"Please enter a valid NPM package name"}),gitCommit:()=>({name:"gitCommit",pattern:new RegExp(q.GIT_COMMIT,"i"),message:"Please enter a valid Git commit hash"}),k8sResourceName:()=>({name:"k8sResourceName",pattern:new RegExp(q.K8S_RESOURCE_NAME),message:"Please enter a valid Kubernetes resource name"}),linkedinProfile:()=>({name:"linkedinProfile",pattern:new RegExp(q.LINKEDIN_PROFILE),message:"Please enter a valid LinkedIn profile URL"}),slackUserId:()=>({name:"slackUserId",pattern:new RegExp(q.SLACK_USER_ID),message:"Please enter a valid Slack user ID"}),e164Phone:()=>({name:"e164Phone",pattern:new RegExp(q.E164_PHONE),message:"Please enter a valid E.164 phone number (+1234567890)"}),firebaseProjectId:()=>({name:"firebaseProjectId",pattern:new RegExp(q.FIREBASE_PROJECT_ID),message:"Please enter a valid Firebase project ID"}),azureResourceGroup:()=>({name:"azureResourceGroup",pattern:new RegExp(q.AZURE_RESOURCE_GROUP),message:"Please enter a valid Azure resource group name"})},A3={required:v.required,email:v.email,phone:v.phone,url:v.url,"numbers only":v.numbersOnly,"digits only":v.numbersOnly,"letters only":v.lettersOnly,alphabetic:v.lettersOnly,alphanumeric:v.alphanumeric,"no spaces":v.noSpaces,"strong password":v.strongPassword,uuid:v.uuid,guid:v.uuid,"ip address":v.ipAddress,date:v.date,time:v.time,"hex color":v.hexColor,color:v.hexColor,slug:v.slug,username:v.username,domain:v.domain,"credit card":v.creditCard,"mongo id":v.mongoId,"mongodb id":v.mongoId,base64:v.base64,json:v.json,ssn:v.ssn,"social security":v.ssn,"social security number":v.ssn,"zip code":v.zipCode,"postal code":v.postalCode,"uk postcode":v.ukPostcode,"file extension":v.fileExtension,"image file":v.imageFile,"document file":v.documentFile,timestamp:v.timestamp,"iso datetime":v.isoDateTime,"visa card":v.visaCard,mastercard:v.masterCard,"master card":v.masterCard,"amex card":v.amexCard,"american express":v.amexCard,"mac address":v.macAddress,"bitcoin address":v.bitcoinAddress,bitcoin:v.bitcoinAddress,"ethereum address":v.ethereumAddress,ethereum:v.ethereumAddress,iban:v.iban,"swift code":v.swiftCode,"bic code":v.swiftCode,"isbn 10":v.isbn10,isbn10:v.isbn10,"isbn 13":v.isbn13,isbn13:v.isbn13,semver:v.semver,"semantic version":v.semver,"jwt token":v.jwtToken,jwt:v.jwtToken,"github username":v.githubUsername,"twitter handle":v.twitterHandle,twitter:v.twitterHandle,"discord id":v.discordId,discord:v.discordId,"youtube video id":v.youtubeVideoId,"youtube id":v.youtubeVideoId,"google drive id":v.googleDriveId,"s3 bucket":v.s3BucketName,"s3 bucket name":v.s3BucketName,"docker image":v.dockerImage,"npm package":v.npmPackage,"git commit":v.gitCommit,"commit hash":v.gitCommit,"k8s resource":v.k8sResourceName,"kubernetes resource":v.k8sResourceName,"linkedin profile":v.linkedinProfile,linkedin:v.linkedinProfile,"slack user id":v.slackUserId,"slack id":v.slackUserId,"e164 phone":v.e164Phone,"international phone":v.e164Phone,"firebase project id":v.firebaseProjectId,firebase:v.firebaseProjectId,"azure resource group":v.azureResourceGroup,azure:v.azureResourceGroup},f3={"min length":v.minLength,"max length":v.maxLength,"minimum length":v.minLength,"maximum length":v.maxLength};function G(J){return J.toLowerCase().trim().replace(/\s+/g," ")}function E(J){let Y=J.match(/\d+/g);return Y?Y.map(Number):[]}function B(J,Y,U,Q=1){let Z=J;if(Y)Z+=U?0.15:-0.2;return Z*=Q,Math.max(0,Math.min(1,Z))}function p(J,Y=!0){if(J.length===0)return"";if(J.length===1)return J[0]??"";let U=J.join("|");return Y?`(?:${U})`:U}var z={name:"RGex",version:"1.0.0",description:"A powerful, chainable regex builder platform",author:"duongnguyen321",website:"https://duongnguyen321.github.io/rgex/",repository:"https://github.com/duongnguyen321/rgex",defaults:{passwordValidation:{minLength:8,maxLength:128,hasNumber:!0,hasSpecial:!0,hasUpperChar:!0,hasLowerChar:!0,hasSymbol:!1,hasUnicode:!1,noSequential:!1,noRepeating:!1,noCommonWords:!1,customPattern:void 0},humanTextConfidence:{high:0.8,medium:0.6,low:0.4},flags:{global:!1,ignoreCase:!1,multiline:!1,dotAll:!1,unicode:!1,sticky:!1}},features:{humanTextParsing:!0,advancedPasswordValidation:!0,prebuiltPatterns:!0,builderPattern:!0,validationMethods:!0},messages:{errors:{invalidPattern:"Invalid regex pattern provided",unknownHumanText:"Could not understand the text description",invalidCustomPattern:"Invalid custom pattern in password validation",validationFailed:"Validation failed for the provided input"},success:{patternExtracted:"Successfully extracted pattern from human text",validationRulesExtracted:"Successfully extracted validation rules",passwordAnalyzed:"Password analysis completed"}}};function h(J,Y,U){let Q=[],Z=J.match(/starts?\s+with\s+['""]([^'""]+)['""]|starts?\s+with\s+([^\s]+)/i);if(Z&&(Z[1]||Z[2])){let W=Z[1]||Z[2]||"";if(U){let k=U.match(/starts?\s+with\s+['""]([^'""]+)['""]|starts?\s+with\s+([^\s]+)/i);if(k&&(k[1]||k[2]))W=k[1]||k[2]||""}let y=m(W),H=0.85;if(Y){let j=new RegExp(y).test(Y);H=B(H,!0,j)}return{success:!0,pattern:new RegExp(y),confidence:H,description:`Text that starts with "${W}"`,suggestions:Q}}let $=J.match(/ends?\s+with\s+['""]([^'""]+)['""]|ends?\s+with\s+([^\s]+)/i);if($&&($[1]||$[2])){let W=$[1]||$[2]||"";if(U){let k=U.match(/ends?\s+with\s+['""]([^'""]+)['""]|ends?\s+with\s+([^\s]+)/i);if(k&&(k[1]||k[2]))W=k[1]||k[2]||""}let y=C(W),H=0.85;if(Y){let j=new RegExp(y).test(Y);H=B(H,!0,j)}return{success:!0,pattern:new RegExp(y),confidence:H,description:`Text that ends with "${W}"`,suggestions:Q}}let K=J.match(/contains?\s+['""]([^'""]+)['""]|contains?\s+([^\s]+)/i);if(K&&(K[1]||K[2])){let W=K[1]||K[2]||"";if(U){let k=U.match(/contains?\s+['""]([^'""]+)['""]|contains?\s+([^\s]+)/i);if(k&&(k[1]||k[2]))W=k[1]||k[2]||""}let y=R(W),H=0.8;if(Y){let j=new RegExp(y).test(Y);H=B(H,!0,j)}return{success:!0,pattern:new RegExp(y),confidence:H,description:`Text that contains "${W}"`,suggestions:Q}}return null}function V(J,Y){let U=[],Q=J.match(/between\s+(\d+)\s+and\s+(\d+)\s+characters?/i);if(Q&&Q[1]&&Q[2]){let H=parseInt(Q[1]),k=parseInt(Q[2]),j=f(H,k),M=0.9;if(Y){let X=new RegExp(j).test(Y);M=B(M,!0,X)}return{success:!0,pattern:new RegExp(j),confidence:M,description:`Text between ${H} and ${k} characters`,suggestions:U}}let Z=J.match(/exactly\s+(\d+)\s+characters?/i);if(Z&&Z[1]){let H=parseInt(Z[1]),k=A(H),j=0.9;if(Y){let b=new RegExp(k).test(Y);j=B(j,!0,b)}return{success:!0,pattern:new RegExp(k),confidence:j,description:`Text with exactly ${H} characters`,suggestions:U}}let $=J.match(/at\s+least\s+(\d+)\s+characters?/i);if($&&$[1]){let H=parseInt($[1]),k=_(H),j=0.85;if(Y){let b=new RegExp(k).test(Y);j=B(j,!0,b)}return{success:!0,pattern:new RegExp(k),confidence:j,description:`Text with at least ${H} characters`,suggestions:U}}let K=J.match(/at\s+most\s+(\d+)\s+characters?/i);if(K&&K[1]){let H=parseInt(K[1]),k=I(H),j=0.85;if(Y){let b=new RegExp(k).test(Y);j=B(j,!0,b)}return{success:!0,pattern:new RegExp(k),confidence:j,description:`Text with at most ${H} characters`,suggestions:U}}let W=J.match(/minimum\s+(\d+)\s+characters?/i);if(W&&W[1]){let H=parseInt(W[1]),k=_(H),j=0.85;if(Y){let b=new RegExp(k).test(Y);j=B(j,!0,b)}return{success:!0,pattern:new RegExp(k),confidence:j,description:`Text with minimum ${H} characters`,suggestions:U}}let y=J.match(/maximum\s+(\d+)\s+characters?/i);if(y&&y[1]){let H=parseInt(y[1]),k=I(H),j=0.85;if(Y){let b=new RegExp(k).test(Y);j=B(j,!0,b)}return{success:!0,pattern:new RegExp(k),confidence:j,description:`Text with maximum ${H} characters`,suggestions:U}}return null}function T(J,Y){let U=[];if(J.includes("email")&&(J.includes("number in domain")||J.includes("digit in domain"))){let Z=0.8;if(Y){let K=new RegExp("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9]*\\d+[a-zA-Z0-9-]*(?:\\.[a-zA-Z0-9]*\\d*[a-zA-Z0-9-]*)*$").test(Y);if(Z=B(Z,!0,K),!K)U.push(`The test value "${Y}" doesn't match the email with number in domain pattern`,"Try emails like: user@domain123.com, test@abc1.org")}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9]*\\d+[a-zA-Z0-9-]*(?:\\.[a-zA-Z0-9]*\\d*[a-zA-Z0-9-]*)*$"),confidence:Z,description:"Email address with at least one number in the domain",suggestions:U}}if(J.includes("email")&&(J.includes(".com domain")||J.includes("ending with .com")||J.includes("only .com")||J.includes("com domain"))){let Z=0.8;if(Y){let K=new RegExp("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\\.com$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\\.com$"),confidence:Z,description:"Email address with .com domain only",suggestions:U}}if(J.includes("email")&&(J.includes("corporate")||J.includes("business")||J.includes("company")||J.includes("work"))){let Z=0.75;if(Y){let K=new RegExp("^[a-zA-Z0-9._%+-]+@(?!gmail|yahoo|hotmail|outlook|aol|icloud)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9._%+-]+@(?!gmail|yahoo|hotmail|outlook|aol|icloud)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"),confidence:Z,description:"Corporate email address (excludes common free providers)",suggestions:U}}if(J.includes("email")&&(J.includes("without plus")||J.includes("no plus")||J.includes("exclude plus"))){let Z=0.8;if(Y){let K=new RegExp("^[a-zA-Z0-9.!#$%&'*_=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9.!#$%&'*_=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"),confidence:Z,description:"Email address without plus signs",suggestions:U}}return null}function d(J,Y){let U=[];if(J.includes("phone")&&(J.includes("us ")||J.includes("american")||J.includes("usa")||J.includes("united states"))){let Z=0.8;if(Y){let K=new RegExp("^(\\+1[-\\s]?)?(\\(?[0-9]{3}\\)?[-\\s]?[0-9]{3}[-\\s]?[0-9]{4})$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^(\\+1[-\\s]?)?(\\(?[0-9]{3}\\)?[-\\s]?[0-9]{3}[-\\s]?[0-9]{4})$"),confidence:Z,description:"US phone number format (with optional +1)",suggestions:U}}if(J.includes("phone")&&(J.includes("with dash")||J.includes("with hyphen")||J.includes("xxx-xxx")||J.includes("dash format"))){let Z=0.8;if(Y){let K=new RegExp("^\\d{3}-\\d{3}-\\d{4}$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^\\d{3}-\\d{3}-\\d{4}$"),confidence:Z,description:"Phone number with dash format (xxx-xxx-xxxx)",suggestions:U}}if(J.includes("phone")&&(J.includes("country code")||J.includes("international"))){let Z=0.8;if(Y){let K=new RegExp("^\\+[1-9]\\d{1,4}[1-9]\\d{4,14}$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^\\+[1-9]\\d{1,4}[1-9]\\d{4,14}$"),confidence:Z,description:"Phone number with required country code",suggestions:U}}return null}function x(J,Y){let U=[];if(J.includes("password")&&(J.includes("no dictionary")||J.includes("without common")||J.includes("no common words")||J.includes("exclude dictionary"))){let Z=0.75;if(Y){let K=new RegExp("^(?!.*(password|123456|qwerty|admin|welcome|letmein|monkey|dragon|master|shadow|abc123|password123|admin123|welcome123|iloveyou|princess|football|baseball|superman|michael|computer|login)).{8,}$","i").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^(?!.*(password|123456|qwerty|admin|welcome|letmein|monkey|dragon|master|shadow|abc123|password123|admin123|welcome123|iloveyou|princess|football|baseball|superman|michael|computer|login)).{8,}$","i"),confidence:Z,description:"Password without common dictionary words",suggestions:U}}if(J.includes("password")&&(J.includes("strong")||J.includes("complex"))&&J.includes("8")){let Z=0.8;if(Y){let K=new RegExp(`^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?]).{8,}$`).test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp(`^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?]).{8,}$`),confidence:Z,description:"Strong password: minimum 8 characters with uppercase, lowercase, number, and special character",suggestions:U}}return null}function u(J,Y){let U=[];if(J.includes("date")&&J.includes("mm/dd")||J.includes("date")&&J.includes("american")){let Z=0.8;if(Y){let K=new RegExp("^(0[1-9]|1[0-2])\\/(0[1-9]|[12]\\d|3[01])\\/(19|20)\\d{2}$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^(0[1-9]|1[0-2])\\/(0[1-9]|[12]\\d|3[01])\\/(19|20)\\d{2}$"),confidence:Z,description:"Date in MM/DD/YYYY format",suggestions:U}}if(J.includes("date")&&J.includes("dd/mm")||J.includes("date")&&J.includes("european")){let Z=0.8;if(Y){let K=new RegExp("^(0[1-9]|[12]\\d|3[01])\\/(0[1-9]|1[0-2])\\/(19|20)\\d{2}$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^(0[1-9]|[12]\\d|3[01])\\/(0[1-9]|1[0-2])\\/(19|20)\\d{2}$"),confidence:Z,description:"Date in DD/MM/YYYY format",suggestions:U}}if(J.includes("age")&&J.includes("18")||J.includes("over 18")||J.includes("adult")){let Z=0.75;if(Y){let K=new RegExp("^(?:1[89]|[2-9]\\d|1[01]\\d|120)$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^(?:1[89]|[2-9]\\d|1[01]\\d|120)$"),confidence:Z,description:"Age 18 or older (18-120)",suggestions:U}}return null}function i(J,Y){let U=[];if(J.includes("url")&&J.includes("https")){let Z=0.8;if(Y){let K=new RegExp("^https:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^https:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$"),confidence:Z,description:"HTTPS URL only",suggestions:U}}if(J.includes("url")&&(J.includes("without query")||J.includes("no parameters")||J.includes("no query")||J.includes("clean url"))){let Z=0.8;if(Y){let K=new RegExp("^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#\\/=]*)(?!.*\\?)$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#\\/=]*)(?!.*\\?)$"),confidence:Z,description:"URL without query parameters",suggestions:U}}return null}function r(J,Y){let U=[];if((J.includes("credit")||J.includes("card"))&&J.includes("visa")){let Z=0.8;if(Y){let K=new RegExp("^4[0-9]{12}(?:[0-9]{3})?$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^4[0-9]{12}(?:[0-9]{3})?$"),confidence:Z,description:"Visa credit card number",suggestions:U}}if(J.includes("social security")||J.includes("ssn")){let Z=0.8;if(Y){let K=new RegExp("^(?!666|000|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4}$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^(?!666|000|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4}$"),confidence:Z,description:"US Social Security Number (XXX-XX-XXXX)",suggestions:U}}if((J.includes("zip")||J.includes("postal"))&&(J.includes("us")||J.includes("american"))){let Z=0.8;if(Y){let K=new RegExp("^\\d{5}(-\\d{4})?$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^\\d{5}(-\\d{4})?$"),confidence:Z,description:"US ZIP code (5 digits with optional +4)",suggestions:U}}return null}function l(J,Y){let U=[];if(J.includes("uppercase")||J.includes("all caps")||J.includes("capital letters")){let Z=0.8;if(Y){let K=new RegExp("^[A-Z\\s]+$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^[A-Z\\s]+$"),confidence:Z,description:"Uppercase letters only (with spaces allowed)",suggestions:U}}if(J.includes("no spaces")||J.includes("without spaces")||J.includes("no whitespace")){let Z=0.8;if(Y){let K=new RegExp("^\\S+$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^\\S+$"),confidence:Z,description:"Text without any spaces",suggestions:U}}if(J.includes("alphanumeric")||J.includes("letters")&&J.includes("numbers")&&J.includes("only")){let Z=0.8;if(Y){let K=new RegExp("^[a-zA-Z0-9]+$").test(Y);Z=B(Z,!0,K)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9]+$"),confidence:Z,description:"Alphanumeric characters only (letters and numbers)",suggestions:U}}return null}function o(J,Y){if(J.includes("employee id")&&J.includes("department")&&J.includes("prefix")&&J.includes("4 digit")){let Q=0.85;if(Y){let $=new RegExp("^[A-Z]{2,4}-\\d{4}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-Z]{2,4}-\\d{4}$"),confidence:Q,description:"Employee ID with department prefix and 4 digit number",suggestions:[]}}if(J.includes("invoice")&&J.includes("year")&&J.includes("sequential")){let Q=0.85;if(Y){let $=new RegExp("^INV-(20\\d{2})-\\d{6}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^INV-(20\\d{2})-\\d{6}$"),confidence:Q,description:"Invoice number with year and sequential number",suggestions:[]}}if(J.includes("product sku")&&J.includes("category")&&J.includes("letters")&&J.includes("numeric")){let Q=0.85;if(Y){let $=new RegExp("^[A-Z]{3}-\\d{5}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-Z]{3}-\\d{5}$"),confidence:Q,description:"Product SKU with category letters and numeric code",suggestions:[]}}return null}function c(J,Y){if(J.includes("slack channel")&&J.includes("hash")&&J.includes("lowercase")){let Q=0.85;if(Y){let $=new RegExp("^#[a-z0-9-_]+$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^#[a-z0-9-_]+$"),confidence:Q,description:"Slack channel name with hash and lowercase letters",suggestions:[]}}if(J.includes("discord")&&J.includes("username")&&J.includes("discriminator")){let Q=0.85;if(Y){let $=new RegExp("^[a-zA-Z0-9_.-]{2,32}#\\d{4}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9_.-]{2,32}#\\d{4}$"),confidence:Q,description:"Discord username with discriminator number",suggestions:[]}}if(J.includes("mention")&&J.includes("at symbol")&&J.includes("alphanumeric")){let Q=0.8;if(Y){let $=new RegExp("^@[a-zA-Z0-9_.]+$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^@[a-zA-Z0-9_.]+$"),confidence:Q,description:"Mention with at symbol and alphanumeric username",suggestions:[]}}return null}function s(J,Y){if(J.includes("date")&&J.includes("mm/dd/yyyy")&&J.includes("between")&&J.includes("2000")&&J.includes("2030")){let Q=0.9;if(Y){let $=new RegExp("^(0[1-9]|1[0-2])\\/(0[1-9]|[12]\\d|3[01])\\/(200[0-9]|201[0-9]|202[0-9]|2030)$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^(0[1-9]|1[0-2])\\/(0[1-9]|[12]\\d|3[01])\\/(200[0-9]|201[0-9]|202[0-9]|2030)$"),confidence:Q,description:"Date in MM/DD/YYYY format between 2000 and 2030",suggestions:[]}}if(J.includes("datetime")&&J.includes("timezone")&&J.includes("milliseconds")){let Q=0.85;if(Y){let $=new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[+-]\\d{2}:\\d{2}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[+-]\\d{2}:\\d{2}$"),confidence:Q,description:"DateTime with timezone and milliseconds (ISO 8601)",suggestions:[]}}return null}function n(J,Y){if(J.includes("student id")&&J.includes("year")&&J.includes("sequence")){let Q=0.85;if(Y){let $=new RegExp("^(20\\d{2})-(\\d{6})$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^(20\\d{2})-(\\d{6})$"),confidence:Q,description:"Student ID with year and sequence number",suggestions:[]}}if(J.includes("course code")&&J.includes("department")&&J.includes("number")){let Q=0.85;if(Y){let $=new RegExp("^[A-Z]{2,4}-\\d{3,4}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-Z]{2,4}-\\d{3,4}$"),confidence:Q,description:"Course code with department and number",suggestions:[]}}if(J.includes("grade")&&J.includes("letter")&&J.includes("optional plus or minus")){let Q=0.85;if(Y){let $=new RegExp("^[A-F][+-]?$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-F][+-]?$"),confidence:Q,description:"Grade with letter and optional plus or minus",suggestions:[]}}return null}function a(J,Y){if(J.includes("email")&&(J.includes("corporate")||J.includes("business"))&&J.includes("at least")&&J.includes("8")&&J.includes("before")){let Q=0.85;if(Y){let $=new RegExp("^[a-zA-Z0-9._%+-]{8,}@(?!gmail|yahoo|hotmail|outlook|aol|icloud)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9._%+-]{8,}@(?!gmail|yahoo|hotmail|outlook|aol|icloud)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"),confidence:Q,description:"Corporate email with at least 8 characters before @",suggestions:[]}}if(J.includes("email")&&J.includes("number in domain")&&J.includes(".com")){let Q=0.85;if(Y){let $=new RegExp("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9]*\\d+[a-zA-Z0-9-]*\\.com$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9]*\\d+[a-zA-Z0-9-]*\\.com$"),confidence:Q,description:"Email with number in domain and .com extension",suggestions:[]}}if(J.includes("email")&&J.includes("custom domain")&&J.includes("not gmail")&&J.includes("5 characters before")){let Q=0.85;if(Y){let $=new RegExp("^[a-zA-Z0-9._%+-]{5,}@(?!gmail|yahoo|hotmail|outlook|aol|icloud)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9._%+-]{5,}@(?!gmail|yahoo|hotmail|outlook|aol|icloud)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"),confidence:Q,description:"Email with custom domain (not Gmail/Yahoo/Hotmail) and minimum 5 characters before @",suggestions:[]}}return null}function t(J,Y){if(J.includes("filename")&&J.includes("extension")&&J.includes("no spaces")&&(J.includes("no special")||J.includes("special characters"))){let Q=0.8;if(Y){let $=new RegExp("^[a-zA-Z0-9._-]+\\.[a-zA-Z0-9]{1,4}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[a-zA-Z0-9._-]+\\.[a-zA-Z0-9]{1,4}$"),confidence:Q,description:"Clean filename with extension, no spaces or special characters",suggestions:[]}}if(J.includes("json")&&J.includes("required fields")){let Q=0.75;if(Y){let $=new RegExp('^\\{(?=.*"id"\\s*:\\s*\\d+)(?=.*"name"\\s*:\\s*"[^"]*")(?=.*"email"\\s*:\\s*"[^"]*@[^"]*").*\\}$').test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp('^\\{(?=.*"id"\\s*:\\s*\\d+)(?=.*"name"\\s*:\\s*"[^"]*")(?=.*"email"\\s*:\\s*"[^"]*@[^"]*").*\\}$'),confidence:Q,description:"JSON object with required fields: id (number), name (string), email (string)",suggestions:[]}}if(J.includes("file path")&&J.includes("unix style")&&J.includes("forward slashes")&&J.includes("no spaces")){let Q=0.85;if(Y){let $=new RegExp("^(\\.{1,2})?/[^\\s]+$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^(\\.{1,2})?/[^\\s]+$"),confidence:Q,description:"File path with Unix style forward slashes and no spaces",suggestions:[]}}if(J.includes("semantic version")&&J.includes("major minor patch")&&J.includes("optional prerelease")){let Q=0.9;if(Y){let $=new RegExp("^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"),confidence:Q,description:"Semantic version with major.minor.patch and optional prerelease",suggestions:[]}}if(J.includes("log entry")&&J.includes("timestamp")&&J.includes("level")&&J.includes("message")){let Q=0.85;if(Y){let $=new RegExp("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} (DEBUG|INFO|WARN|ERROR|FATAL) .+$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} (DEBUG|INFO|WARN|ERROR|FATAL) .+$"),confidence:Q,description:"Log entry with timestamp, level, and message",suggestions:[]}}return null}function e(J,Y){if(J.includes("credit card")&&J.includes("expiry")&&J.includes("cvv")){let Q=0.85;if(Y){let $=new RegExp("^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})\\s+(0[1-9]|1[0-2])\\/\\d{2}\\s+\\d{3,4}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})\\s+(0[1-9]|1[0-2])\\/\\d{2}\\s+\\d{3,4}$"),confidence:Q,description:"Credit card number with expiry date (MM/YY) and CVV",suggestions:[]}}if(J.includes("bank account")&&J.includes("routing")&&J.includes("account number")){let Q=0.8;if(Y){let $=new RegExp("^\\d{9}\\s+\\d{4,17}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\d{9}\\s+\\d{4,17}$"),confidence:Q,description:"Bank account with routing number (9 digits) and account number (4-17 digits)",suggestions:[]}}if(J.includes("iban")&&J.includes("country code")&&J.includes("check digits")){let Q=0.85;if(Y){let $=new RegExp("^[A-Z]{2}\\d{2}[A-Z0-9]{15,30}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-Z]{2}\\d{2}[A-Z0-9]{15,30}$"),confidence:Q,description:"IBAN with country code and check digits",suggestions:[]}}if(J.includes("bitcoin")&&J.includes("1 or 3 prefix")&&J.includes("base58")){let Q=0.85;if(Y){let $=new RegExp("^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$"),confidence:Q,description:"Bitcoin address with 1 or 3 prefix and base58 characters",suggestions:[]}}if(J.includes("swift")&&J.includes("8 or 11 characters")&&J.includes("bank")){let Q=0.85;if(Y){let $=new RegExp("^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$"),confidence:Q,description:"SWIFT code with 8 or 11 characters bank identifier",suggestions:[]}}return null}function J3(J,Y){if(J.includes("medical record")&&J.includes("facility code")&&J.includes("patient id")){let Q=0.85;if(Y){let $=new RegExp("^[A-Z]{3}-\\d{8}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-Z]{3}-\\d{8}$"),confidence:Q,description:"Medical record number with facility code and patient ID",suggestions:[]}}if(J.includes("prescription")&&J.includes("pharmacy code")&&J.includes("sequence")){let Q=0.85;if(Y){let $=new RegExp("^RX-[A-Z]{3}-\\d{7}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^RX-[A-Z]{3}-\\d{7}$"),confidence:Q,description:"Prescription number with pharmacy code and sequence",suggestions:[]}}if(J.includes("npi")&&J.includes("10 digits")&&J.includes("healthcare")){let Q=0.9;if(Y){let $=new RegExp("^\\d{10}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\d{10}$"),confidence:Q,description:"NPI number with 10 digits for healthcare provider",suggestions:[]}}return null}function Q3(J,Y){if(J.includes("unicode letters")&&J.includes("numbers")&&J.includes("common punctuation")){let Q=0.8;if(Y){let $=new RegExp("^[\\p{L}\\p{N}\\p{P}\\s]+$","u").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[\\p{L}\\p{N}\\p{P}\\s]+$","u"),confidence:Q,description:"Text with unicode letters, numbers, and common punctuation",suggestions:[]}}if(J.includes("name")&&J.includes("international characters")&&J.includes("optional middle initial")){let Q=0.8;if(Y){let $=new RegExp("^[\\p{L}\\s]+([\\p{L}]\\.\\s)?[\\p{L}\\s]+$","u").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[\\p{L}\\s]+([\\p{L}]\\.\\s)?[\\p{L}\\s]+$","u"),confidence:Q,description:"Name with international characters and optional middle initial",suggestions:[]}}return null}function Y3(J,Y){if(J.includes("password")&&J.includes("uppercase")&&J.includes("lowercase")&&J.includes("number")&&J.includes("special")&&J.includes("no dictionary")&&J.includes("12")){let Q=0.9;if(Y){let $=new RegExp(`^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?])(?!.*(password|123456|qwerty|admin|welcome|letmein|monkey|dragon|master|shadow|abc123|password123|admin123|welcome123|iloveyou|princess|football|baseball|superman|michael|computer|login)).{12,}$`,"i").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp(`^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?])(?!.*(password|123456|qwerty|admin|welcome|letmein|monkey|dragon|master|shadow|abc123|password123|admin123|welcome123|iloveyou|princess|football|baseball|superman|michael|computer|login)).{12,}$`,"i"),confidence:Q,description:"Complex password: 12+ chars, mixed case, number, special, no dictionary words",suggestions:[]}}if(J.includes("password")&&J.includes("at least 3 numbers")&&J.includes("2 special characters")&&J.includes("10")){let Q=0.85;if(Y){let $=new RegExp(`^(?=(?:.*\\d){3,})(?=(?:.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?]){2,}).{10,}$`).test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp(`^(?=(?:.*\\d){3,})(?=(?:.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?]){2,}).{10,}$`),confidence:Q,description:"Password with at least 3 numbers, 2 special characters, minimum 10 chars",suggestions:[]}}if(J.includes("password")&&J.includes("2 uppercase")&&J.includes("2 lowercase")&&J.includes("2 numbers")&&J.includes("2 special")&&J.includes("12 characters")&&J.includes("no common words")){let Q=0.9;if(Y){let $=new RegExp(`^(?=(?:.*[A-Z]){2,})(?=(?:.*[a-z]){2,})(?=(?:.*\\d){2,})(?=(?:.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?]){2,})(?!.*(password|123456|qwerty|admin|welcome|letmein|monkey|dragon|master|shadow|abc123|password123|admin123|welcome123|iloveyou|princess|football|baseball|superman|michael|computer|login)).{12,}$`,"i").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp(`^(?=(?:.*[A-Z]){2,})(?=(?:.*[a-z]){2,})(?=(?:.*\\d){2,})(?=(?:.*[!@#$%^&*()_+\\-=\\[\\]{};':"\\\\|,.<>\\/?]){2,})(?!.*(password|123456|qwerty|admin|welcome|letmein|monkey|dragon|master|shadow|abc123|password123|admin123|welcome123|iloveyou|princess|football|baseball|superman|michael|computer|login)).{12,}$`,"i"),confidence:Q,description:"Complex password: 2+ uppercase, 2+ lowercase, 2+ numbers, 2+ special, 12+ chars, no common words",suggestions:[]}}return null}function Z3(J,Y){if(J.includes("phone")&&J.includes("us")&&J.includes("area code")&&J.includes("10 digits")){let Q=0.9;if(Y){let $=new RegExp("^\\(?[2-9][0-8][0-9]\\)?[\\s-]*[0-9]{3}[\\s-]*[0-9]{4}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\(?[2-9][0-8][0-9]\\)?[\\s-]*[0-9]{3}[\\s-]*[0-9]{4}$"),confidence:Q,description:"US phone number with valid area code and exactly 10 digits",suggestions:[]}}if(J.includes("phone")&&J.includes("international")&&J.includes("country code")&&J.includes("between")&&J.includes("10")&&J.includes("15")){let Q=0.85;if(Y){let $=new RegExp("^\\+[1-9]\\d{0,3}[\\s-]+(?:\\d[\\s-]*){6,}\\d$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\+[1-9]\\d{0,3}[\\s-]+(?:\\d[\\s-]*){6,}\\d$"),confidence:Q,description:"International phone with country code, 10-15 digits total",suggestions:[]}}if(J.includes("phone")&&J.includes("country code")&&J.includes("area code")&&J.includes("exactly 10 digits")){let Q=0.9;if(Y){let $=new RegExp("^\\+1[\\s-]?\\(?[2-9][0-8][0-9]\\)?[\\s-]?[0-9]{3}[\\s-]?[0-9]{4}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\+1[\\s-]?\\(?[2-9][0-8][0-9]\\)?[\\s-]?[0-9]{3}[\\s-]?[0-9]{4}$"),confidence:Q,description:"Phone number with country code, area code, and exactly 10 digits total",suggestions:[]}}return null}function $3(J,Y){if(J.includes("ipv4")&&J.includes("subnet mask")){let Q=0.85;if(Y){let $=new RegExp("^(?:(?: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]?)\\/(?:[0-9]|[1-2][0-9]|3[0-2])$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^(?:(?: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]?)\\/(?:[0-9]|[1-2][0-9]|3[0-2])$"),confidence:Q,description:"IPv4 address with CIDR subnet mask notation",suggestions:[]}}if(J.includes("mac address")&&J.includes("colons")&&J.includes("uppercase")){let Q=0.85;if(Y){let $=new RegExp("^[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}$"),confidence:Q,description:"MAC address with colons and uppercase letters",suggestions:[]}}if(J.includes("two factor")&&J.includes("6 digits")&&J.includes("optional spaces")){let Q=0.9;if(Y){let $=new RegExp("^\\d{3}\\s?\\d{3}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^\\d{3}\\s?\\d{3}$"),confidence:Q,description:"Two factor authentication code with 6 digits and optional spaces",suggestions:[]}}if(J.includes("api key")&&J.includes("prefix")&&J.includes("32 character")&&J.includes("hex")){let Q=0.9;if(Y){let $=new RegExp("^sk_[0-9a-f]{32}$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^sk_[0-9a-f]{32}$"),confidence:Q,description:"API key with prefix and 32 character hex string",suggestions:[]}}if(J.includes("jwt")&&J.includes("three")&&J.includes("base64")&&J.includes("dots")){let Q=0.85;if(Y){let $=new RegExp("^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$"),confidence:Q,description:"JWT token with three base64 parts separated by dots",suggestions:[]}}return null}function U3(J,Y){if(J.includes("docker image")&&J.includes("tag")&&J.includes("version")){let Q=0.85;if(Y){let $=new RegExp("^[a-z0-9._/-]+:[a-zA-Z0-9._-]+$").test(Y);Q=B(Q,!0,$)}return{success:!0,pattern:new RegExp("^[a-z0-9._/-]+:[a-zA-Z0-9._-]+$"),confidence:Q,description:"Docker image tag with registry and version",suggestions:[]}}if(J.includes("kubernetes pod")&&J.includes("deployment")&&J.includes("random suffix")){let Q=0.8;if(Y){let $=new RegExp("^[a-z0-9-]+-[a-z0-9]{6,10