Пробелы в валидации поля
Добрейшего времени суток помогите пожалуйста с проблемой
есть у меня такая регулярка, но она пропускает проблемы вначале "логина" и в конце ,как этого избежать ? /^[A-Za-z0-9]{6,16}$/ также пробовал с ^[\s] В центре он не пропускает, а по краям пропускает пробелы
function regLog(login)
{
return /^[A-Za-z0-9]{6,16}$/.test(login);
}
loginValue = login.value.trim();
else if (!regLog(loginValue))
{
setErrorFor(login, 'Введите корректно логин');
}
так я это всё использую, помогите пожалуйста как убрать эти пробелы |
Можете объяснить почему это так работает ?
я не понимаю... |
Разобрался почему так
у меня следующий вопрос связанный с регулярками мне нужен ввод маила, чтобы нельзя было ввести два знака @@ по типу mail@@mail.ru && mail@m@ail.ru |
http://emailregex.com/
var regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
alert([
regex.test('asd@asd'),
regex.test('asd@asd.ad'),
regex.test('asd@asd@adsda.asd')
]);// false, true, false
|
Andrew2108,
/^[^@]+@[^@]+$/ |
Спасибо Nexus, работает, за исключением пробелов в начале и в конце самого маила, не подскажешь как эти пробелы убрать ?
|
Andrew2108,
.trim() ?? |
Если трим , то это уже не валидация, а мне нужно, чтобы ошибку давало по типу :"введите правильно маил".если есть пробелы
|
А зачем тогда вы trim используете?
Покажите свой нынешний код. |
Я проверил, трим убирает пробелы при записи, но мне нужна именно валидация, а не пустое отсечение пробелов, поэтому нужна регулярка, которую я сам пока не в состоянии написать
const emailValue = email.value; // значение из поля
// регулярка
function regEmail(email)
{
return /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email);
}
// вызов регулярки и условие
else if (!regEmail(emailValue))
{
setErrorFor(email, 'Введите email корректно');
}
|
Ну вот же написали вам регулярку. Наверно она покрывает 95% возможных email адресов и возможных ошибок. Не думаю, что можно (или можно не безумно сложным способом) написать регулярку на 100% покрывающую все допустимые email и отлавливающие все ошибки
|
Эти валидации емейла, можете из готовых либ поискать
Вот, например в yii, так делают (часть кода)
email: function (value, messages, options) {
if (options.skipOnEmpty && pub.isEmpty(value)) {
return;
}
var valid = true,
regexp = /^((?:"?([^"]*)"?\s)?)(?:\s+)?(?:(<?)((.+)@([^>]+))(>?))$/,
matches = regexp.exec(value);
if (matches === null) {
valid = false;
} else {
var localPart = matches[5],
domain = matches[6];
if (options.enableIDN) {
localPart = punycode.toASCII(localPart);
domain = punycode.toASCII(domain);
value = matches[1] + matches[3] + localPart + '@' + domain + matches[7];
}
if (localPart.length > 64) {
valid = false;
} else if ((localPart + '@' + domain).length > 254) {
valid = false;
} else {
valid = options.pattern.test(value) || (options.allowName && options.fullPattern.test(value));
}
}
if (!valid) {
pub.addMessage(messages, options.message, value);
}
},
|
Вы сами то тестировали эту регулярку?
Все верные адреса она пропускает и все неверные отсекает? |
Да, там все сложнее оказывается, весь этот код выше для чего то своего, а паттерн вот тут тестируется - valid = options.pattern
, паттерн там такой: https://www.yiiframework.com/doc/api/2.0/yii-validators-emailvalidator#$pattern-detail |
Все равно всего он не проверяет. Либо не допускает корректные адреса, либо пропускает некорректные
Я уж не говорю про интернационализацию. (по современным протоколам почтовых серверов в адресе могут быть и кириллические буквы, и греческие, и арабские, и иероглифы). https://ru.abcdef.wiki/wiki/Email_address Поэтому слишком муторно (а возможно ли?) писать регулярку покрывающую 100% верных адресов, и отбрасывающую 100% неверных. Да и нужно ли. Ведь пользователь может ошибиться в самом адресе. Скажем напишет не voraa@gmail.com, а woraa@gmeil.com (что чаще и происходит) И толку от этих всех проверок |
Она покрывает все верные и не верные, но маил с пробелом в начале и в конце адреса проходит валидацию.
Регулярно уже есть, мне нужно, добавить в эту регулярно, чтобы эти пробелы не проходили валидацию, т. Е. Выдавало ошибку, если они будут присутствовать. |
Andrew2108,
var regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|("[\S.]+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
console.log([
regex.test('asd@aasd.sd'),// true
regex.test(' [email]asd@aasd.sd[/email] '),// false
regex.test('asd@aasd.sd '),// false
regex.test(' [email]asd@aasd.sd[/email]'),// false
regex.test('asd@@aasd.sd'),// false
regex.test('asd@aa@sd.sd'),// false
regex.test('@asd@sd.sd'),// false
regex.test('asd@sd.sd@'),// false
regex.test(' @asd@sd.sd'),// false
regex.test(' @asd@sd.sd '),// false
regex.test(' [email]asd@sd.sd[/email]@'),// false
regex.test(' [email]asd@sd.sd[/email]@ ')// false
]);
|
А что насчет
kot.matroskin(familiya takaya)@mail.ru kot.matroskin@[IPv6:2001:db8::1] "kot\"matroskin\""@mail.ru и kot.matroskin@-mail.ru Тута видимо такая же косая проверка стоит. Верные не распознала, а неверный приняла |
Понятно, что проверка косая, критикуете-предлагайте, я попросил ведь ответ мне дать на конкретный вопрос, а не задавать мне вопросы. На данный момент я не знаю как регулярки писать поэтому и обратился за помощью к знающим.
|
" zzzz@mail.ru" - пропускает
или "zzzz@mail.ru " - также пропускает |
Цитата:
Пример кода приведите, где у вас регулярка пробелы пропускает. |
Andrew2108,
Код:
С пробелом (false): |
Спасибо, работает!
НО не работало, когда поле было с тип email, не знаю почему, он добавлял и обрезал сам все пробелы. Поменял тип на текст в поле и сё прекрасно работает. Всем спасибо |
| Часовой пояс GMT +3, время: 01:08. |