Identity & Contact
Email pattern+MX, E.164 phone, name heuristics, DOB range, UUID/ULID, username policy.
Apply enterprise-ready rules or custom checks to any CSV, XLSX, or JSON. Find errors fast and fix them before they spread.
orderId,email,amount,currency,startDate,endDate,country 1,ada@example.com,120.50,USD,2025-10-01,2025-10-03,US 2,grace@example.com,999999.99,USD,2025-10-02,2025-10-04,CA 3,wrong@,12,USD,2025-10-05,2025-10-01,GB
Auto-detect headers, sample rows, and inferred types. Keep data local in Phase 1.
Open DemoUse RuleAdder to add required, type, length, range, enum, regex, date order and more. Edit options inline; bulk-apply “required.”
See Rule BuilderKPIs, profiling table, and downloadable CSV of issues—matching the demo experience.
Try ValidationMix and match enterprise-ready checks. Extend with custom TS snippets.
Email pattern+MX, E.164 phone, name heuristics, DOB range, UUID/ULID, username policy.
Postal formats, ISO-3166, state/region coherence, lat/lon bounds, distance rules.
Luhn (NPI, IBAN, CC, CUSIP), IBAN, SWIFT/BIC shape, ISO-4217 currency, precision/scale, tax ID lengths.
Required/nullable, enum, regex, min/max, ISO-8601 dates, uniqueness, referential checks.
“If A then B”, conditional ranges, temporal ordering, dependency graphs.
Phase 2: HTTP/SQL/Snowflake/CSV refs with TTL cache, per-rule timeouts, backoff.
{
"entity": "Orders",
"columns": {
"orderId": ["required","uuid_v4"],
"email": ["required","email_pattern"],
"currency": ["iso4217"],
"amount": ["number","precision:2","min:0"],
"createdAt": ["date_iso"],
"shipTo.country": ["iso3166_alpha2"],
"shipTo.postal": ["postal_by_country:shipTo.country"]
},
"policy": { "fail": "any" }
}export default function postalByCountry({ get, add }: any) {
const c = String(get('shipTo.country') || '').toUpperCase()
const p = String(get('shipTo.postal') || '')
const MAP: Record<string, RegExp> = {
US: /^[0-9]{5}(-[0-9]{4})?$/,
CA: /^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/,
GB: /^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$/i
}
const re = MAP[c]
if (re && !re.test(p)) add('postal.pattern', `Postal does not match ${c}`)
}