Regex для номера кредитной карты

Используйте /^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13})$/, чтобы проверить, что вся строка является корректным номером кредитной карты. Каждый пример ниже проверен по этому шаблону, а открыть его с загруженными образцами можно в Regex Tester.

Обновлено

/^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13})$/
Открыть в Regex Tester
ВводРезультат
4111111111111111✓ Совпадение
5500000000000004✓ Совпадение
378282246310005✓ Совпадение
1234567812345678✗ Нет совпадения
4111 1111 1111 1111✗ Нет совпадения
411111111111111✗ Нет совпадения

Как работает шаблон

ЧастьЗначение
4\d{12}(?:\d{3})?Visa: начинается с 4, содержит 13 или 16 цифр
5[1-5]\d{14}Mastercard: 51–55, 16 цифр
3[47]\d{13}American Express: 34 или 37, 15 цифр

Примеры кода

JavaScript

const re = /^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13})$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13})', value))

PHP

preg_match('/^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13})$/', $value) === 1;

Примечания и ограничения

Перед проверкой уберите пробелы и дефисы, затем проверьте контрольную сумму по алгоритму Луна: регулярное выражение проверяет только формат. Mastercard также выпускает номера из диапазона 2221–2720; добавьте |2(?:2[2-9]|[3-6]\d|7[01]|720)\d{12}, чтобы охватить и их. Никогда не записывайте и не храните номера карт в открытом виде. Примеры являются стандартными тестовыми номерами.

Часто задаваемые вопросы

Какое регулярное выражение для номера кредитной карты?
/^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13})$/ — оно проверяет всю строку целиком. Что делает каждая часть, см. в таблице выше.
Какие примеры подходят под шаблон?
Из проверенных примеров совпадают: 4111111111111111, 5500000000000004, 378282246310005. Остальные не совпадают.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и образцы текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.