Столбцы ('или') в ваших регулярных выражениях имеют наибольший приоритет, поэтому регулярное выражение читает:
Соответствует, если входное значение точно одно из:
- Любой 0или более символов, которые ВСЕ соответствуют любой букве (любой регистр) или амперсанду,
- в любом месте от 0 до 3 цифр
- 0 или 1 пробел.
Ваш вводэто ничего из того;это смесь этих вещей. Например, ввод 'a1a' не соответствует вашему регулярному выражению, потому что, ну, пошагово проходите через него: 'a' заставляет совпадение регулярного выражения выбрать первый из ваших 3 вариантов выше, и это ... это. Там нет пути назад сейчас. Ваше регулярное выражение будет соответствовать a, не соответствует 1, и это конец.
Итак, как вы это исправите? Не придерживаясь регулярных выражений;это не хорошее решение для этой проблемы. Регулярное выражение, которое точно выполняет то, что вы просили, очень запутанно.
Вместо этого, почему бы просто не пройтись по каждому символу и иметь 4 счетчика (пробелы, цифры, буквы и другие вещи). Для каждого символа увеличивайте правый счетчик. Затем в конце убедитесь, что счетчик «прочее» равен 0, цифры - 3 или меньше, а пробелы - 1 или меньше, и тогда он действителен. В противном случае это не так.