Regex для канадского почтового индекса

Используйте /^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/, чтобы проверить, что вся строка является корректным канадским почтовым индексом. Каждый пример ниже проверен по шаблону, и его можно открыть в Regex Tester с уже загруженными образцами.

Обновлено

/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/
Открыть в Regex Tester
ВводРезультат
K1A 0B1✓ Совпадение
M5V3L9✓ Совпадение
H2X 1Y4✓ Совпадение
D1A 0B1✗ Нет совпадения
K1A-0B1✗ Нет совпадения
12345✗ Нет совпадения
k1a 0b1✗ Нет совпадения

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

ЧастьЗначение
[ABCEGHJ-NPRSTVXY]Первая буква: буквы D, F, I, O, Q, U, W и Z не используются
\dЦифра
[ABCEGHJ-NPRSTV-Z]Буква (D, F, I, O, Q, U исключены)
?Необязательный пробел
\d[ABCEGHJ-NPRSTV-Z]\dЦифра, буква, цифра

Примеры кода

JavaScript

const re = /^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d', value))

PHP

preg_match('/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/', $value) === 1;

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

Если хотите принимать строчные буквы, сначала приведите ввод к верхнему регистру: шаблон намеренно чувствителен к регистру, чтобы отсекать неиспользуемые буквы.

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

Какое регулярное выражение для канадского почтового индекса?
/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/ — оно проверяет всю строку. Что делает каждая часть, см. в таблице выше.
Какие примеры подходят?
Из проверенных примеров совпадают: K1A 0B1, M5V3L9, H2X 1Y4. Остальные не совпадают.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и образцы текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.