2016-01-22 5 views
1

Пользовательский логин должен содержать только латинские и русские буквы, цифры 0-9 и некоторые символы, такие как точка и другие. Я хотел бы использовать регулярное выражение для проверки и пробовать разные варианты, но никто не работает.Regex для проверки входа пользователя не работает

errors["error-name"] = ''; 
var nameRegex = '[a-zA-Z0-9А-Яа-я.+~_-!?*]/i'; 

if(!values['name'].match(nameRegex)) { 
     errors["error-name"] += "Incorrect login<br>"; 
    } 

Что случилось?

+0

Не только это регулярное выражение не соответствует 1 русской букве. Кроме того, главный разделитель регулярных выражений отсутствует. Попробуйте 'var nameRegex = '/ [-A-Z0-9А-ЯЁ. + ~ _!? *]/I';' –

+0

@Wiktor Stribiżew в этом случае логин, хотя он содержит только латинские буквы, неверен – Heidel

+0

So , каковы ваши требования? Вы не сказали, что должно быть не менее 1 латинского и не менее 1 русского письма. –

ответ

1

Чтобы соответствовать всем русским буквам, всего [А-Яа-я] диапазона недостаточно. Вы также должны добавить письмо [ёЁ] в диапазон, так как оно не находится внутри этого.

Кроме того, неэкранированный дефис между буквальными символами внутри символьного класса создает диапазон, и его следует лучше положить в начале или конце класса символов.

Чтобы добавить ограничения, такие как должно быть как минимум N чего-то, вам нужно использовать привязанные образы.

var nameRegex = /^(?=[^A-ZА-ЯЁ]*[A-ZА-ЯЁ])(?=[^0-9]*[0-9])[-A-Z0-9А-ЯЁ.+~_!?*]+$/i; 

Вот its demo

Здесь ^ якоря шаблон в начале строки, $ якоря его в конце, (?=[^A-ZА-ЯЁ]*[A-ZА-ЯЁ]) требует, по меньшей мере, одну букву, и (?=[^0-9]*[0-9]) требует по крайней мере одну цифру.

Примечание. Я удалил все буквы нижнего регистра, так как существует модификатор без учета регистра /i.

Чтобы соответствовать только символы из списка используйте простой + квантор:

var nameRegex = /^[-A-Z0-9А-ЯЁ.+~_!?*]+$/i; 
            ^

Если вы позволяете пустую строку, используйте * вместо +.

+0

Обратите внимание, что демо содержит бит измененного регулярного выражения только для демонстрационных целей (так как вход является многострочным). –

+0

Ну, я только что попробовал 'var nameRegex = '/^[- A-Z0-9А-ЯЁ. + ~ _! *] + $/I';' но в этом случае даже простой логин вроде 'admin' не удается проверить. – Heidel

+0

[Это позволяет проверить 'admin' (https://regex101.com/r/hR7qM8/2). Это JavaScript? Если да, вы должны удалить '' 's. –

1

Вы можете использовать регулярное выражение lookaheads -

/^(?=.*\d)(?=.*[\wА-Яа-я.+~\-!?*]).+$/

В приведенном выше регулярном выражении, первый LOOKAHEAD (?=.*\d) проверки для цифр и следующий LOOKAHEAD (?=.*[\wА-Яа-я.+~\-!?*]) проверяет для наборов символов ASCII и русских и специальные символы ,

Если вы хотите добавить минимальную длину пароля (как, скажем, 8), вы можете сделать, как это - /^(?=.*\d)(?=.*[\wА-Яа-я.+~\-!?*]).{8,}$/

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

+0

Это не соответствует всем русским буквам. –

+0

@ - Wiktor Stribiżew Возможно. Я не знаю русского. Я использовал диапазон, который @Heidel использовал в вопросе. –

+0

На самом деле Ёё - очень редкое письмо, и я не думаю, что кто-то будет использовать его в своем логине, но все может случиться. – Heidel

Смежные вопросы