★ India · regex
Regex for UPI ID (VPA)
A UPI ID is a username, an @ and the payment provider's handle (okaxis, ybl, paytm, oksbi). Letters, digits, dots and hyphens are widely accepted in the username; underscores depend on the provider.
- Runs in your browser
- No signup
Try the upi id (vpa) pattern
Read it in plain English (best-effort)
- ^start of a line
- [a-zA-Z0-9]one character from: a–z, A–Z, 0–9
- [a-zA-Z0-9._-]one character from: a–z, A–Z, 0–9, '.', '_', '-'
- {1,255}between 1 and 255 of the previous
- @the character '@'
- [a-zA-Z]one character from: a–z, A–Z
- [a-zA-Z0-9]one character from: a–z, A–Z, 0–9
- {1,63}between 1 and 63 of the previous
- $end of a line
One sample per line works well with the m flag on anchored patterns.
The pattern, piece by piece
/^[a-zA-Z0-9][a-zA-Z0-9._-]{1,255}@[a-zA-Z][a-zA-Z0-9]{1,63}$/| Part | What it does |
|---|---|
^[a-zA-Z0-9] | the username starts with a letter or digit |
[a-zA-Z0-9._-]{1,255} | letters, digits, dots, underscores, hyphens |
@ | exactly one at sign |
[a-zA-Z][a-zA-Z0-9]{1,63}$ | the provider handle, e.g. okaxis or ybl |
What it accepts and rejects
Every sample below is checked automatically in JavaScript and Python. The tester above is preloaded with all of them, one per line.
| Should match | |
|---|---|
himanshu@okaxis | ✓ |
9876543210@ybl | ✓ |
jane.doe@oksbi | ✓ |
shop-123@paytm | ✓ |
rahul.k@ibl | ✓ |
merchant99@axl | ✓ |
| Should not match | |
|---|---|
himanshu | ✗ |
@okaxis | ✗ |
himanshu@ | ✗ |
him anshu@okaxis | ✗ |
himanshu@ok axis | ✗ |
himanshu@@okaxis | ✗ |
himanshu#1@okaxis | ✗ |
Copy it into your code
RE2-safeNo lookarounds or backreferences, so the same pattern works in Go's RE2 engine and in Rust's regex crate.
const upiIdRe = /^[a-zA-Z0-9][a-zA-Z0-9._-]{1,255}@[a-zA-Z][a-zA-Z0-9]{1,63}$/;
export function isValidUpiId(value) {
return upiIdRe.test(value.trim());
}When not to use regex for this
Only the UPI network can confirm an ID exists and show the account holder's name. Use your payment gateway's VPA validation API before collecting money.
Questions engineers actually ask
Are underscores allowed in UPI IDs?
Does this check the handle is a real bank?
What is catastrophic backtracking?
Sources
Formats were checked on 8 November 2026. Rules change; the official issuer wins if it disagrees.
More india patterns
- Indian Mobile Number10-digit Indian mobiles starting 6–9, with optional +91, 91 or 0.^(?:\+91[ -]?|91[ -]?|0)?[6-9]\d{4}[ -]?\d{5}$
- Indian PIN CodeSix-digit PIN codes not starting with 0, optionally written as 3 + 3.^[1-9][0-9]{2} ?[0-9]{3}$
- PAN Card Number10-character PAN: 5 letters, 4 digits, 1 letter, with a valid holder-type letter.^[A-Z]{3}[ABCFGHJLPT][A-Z][0-9]{4}[A-Z]$
- GSTIN15-character GST number: state code, PAN, entity number, Z, check character.^(?:0[1-9]|[12][0-9]|3[0-8]|97)[A-Z]{3}[ABCFGHJLPT][A-Z][0-9]{4}[A-Z][1-9A-Z]Z[0-9A-Z]$
- Aadhaar Number Format12 digits not starting with 0 or 1, in 4-4-4 groups. Format only.^[2-9][0-9]{3}[ -]?[0-9]{4}[ -]?[0-9]{4}$
- IFSC Code11 characters: 4-letter bank code, a zero, 6-character branch code.^[A-Z]{4}0[A-Z0-9]{6}$
- Indian Vehicle NumberState registrations like MH 12 AB 1234 and Bharat-series like 22 BH 1234 AA.^(?:(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|DN|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|OR|PB|PY|RJ|SK|TN|TR|TS|UK|UP|WB)[ -]?[0-9]{1,2}[A-Z]?[ -]?[A-Z]{0,3}[ -]?[0-9]{4}|[0-9]{2}[ -]?BH[ -]?[0-9]{4}[ -]?[A-Z]{1,2})$
Or browse the full regex library.
More from the workbench
Fine print
Tools: on the house.
Engineer: by the hour.
The regex was free. Code that doesn't need one is the upgrade: typed schemas, validated once at the edge, trusted everywhere after.
I'm Himanshu, an AI and full-stack engineer. I build MVPs, AI agents and the growth plumbing around them for early-stage startups.
