Потому что вы должны использовать правильный инструмент для правильной задачи: вы не должны полагаться на регулярные выражения для проверки номеров IBAN, а вместо этого использовать алгоритм контрольной суммы IBAN для проверки правильности всего кода, что делает любые регулярные выражения излишними. и избыточный. то есть: удалить все пробелы, изменить код, преобразовать в целые числа и вычислить остаток, здесь лучше всего объяснил.
Хотя я пытаюсь ответить на ваш вопрос, ради удовольствия:
как насчет:
^DE([0-9a-zA-Z]\s?){20}$
единственная разница заключается в том, что после каждого появления буквенно-цифрового символа допускается пробел (или нет).
здесь визуализация:
изменить: для информации ОП, единственное отличие состоит в том, что это регулярное выражение от @ulugbex-umirov: (?:\s*[0-9a-zA-Z]\s*)
выполняет предварительную проверку, чтобы увидеть, есть ли пробел между кодом страны iso и контрольной суммой (которая состоит только из числовых цифр), что Специально не поддерживаю.
И на самом деле для поддержки правильного синтаксиса IBAN, который состоит из групп из 4 символов, как сказано на странице википедии:
^DE\d{2}\s?([0-9a-zA-Z]{4}\s?){4}[0-9a-zA-Z]{2}$
пример
Если ваш пользовательский интерфейс написан на Javascript, вы можете использовать эту библиотеку для проверки IBAN:
<script src="iban.js"></script>
<script>
// the API is now accessible from the window.IBAN global object
IBAN.isValid('hello world'); // false
IBAN.isValid('BE68539007547034'); // true
</script>
так что вы знаете, что это действительный IBAN, и можете проверить его еще до того, как данные будут отправлены на сервер. Проще, легче и элегантнее… Зачем делать что-то еще?
person
zmo
schedule
05.05.2014
[DE]{2}
соответствуетDD
илиED
: см. regular-expressions.info/charclass.html а> - person Robin   schedule 05.05.2014