Как исключить ввод кириллицы, спецсимволов и пробелов?
[a-zA-Z0-9]+
Но у вас плохие требования к паролю.
Они выдают непрофессионализм разработчиков, которые внедряют такие требования.
Это признак того, что пароль лежит в открытом (не хешированном) виде в БД.
Это провоцирует делать слабые пароли.
Это выглядит как поделка студентов.

Если и вводить ограничения, то минимальные: 
- пароль должен быть не пустым. Всё.

Однако следует делать предупреждения если:
- пароль содержит кириллицу, или любые символы, которые сложно набрать на любой произвольной клавиатуре. Большая проблема пароль с юникод-символами, если вы хотите ввести его на смартфоне. Большая проблема с кириллицей, если вы хотите войти с компа в турции в отпуске, потеряв, к примеру, телефон.
- пароль слишком короткий;
- хеш пароля находится в списке наиболее распространённых паролей;
- пароль выглядит как набранный с инвертированным капс-локом.

Эти предупреждения должны быть заметны, но не должны запрещать создать такой пароль. Обсуждать можно только то, что касается списка самых распространённых паролей, скажем тысячи самых популярных. Ну и короткие (меньше 6 знаков). 
Пароль следует хешировать с только что сгенерированной солью. Хранить соль нужно рядом с хешем. Также рядом можно указать название алгоритма хеширования. Прямо в одной строке. Это не снизит безопасность, зато избавит вас от проблем связанных с переходом на новые алгортимы хеширования.
https://ru.stackoverflow.com/questions/761716/%D0%...

Вот уже лет двадцать такую задачу решают при помощи регулярных выражений.
Гуглится минут за пять