2015-10-20 3 views
0

Я отлаживал несколько часов и ударил стену - регулярное выражение никогда не было моим сильным. Я смог изменить следующее регулярное выражение, чтобы ограничить 255 символов для домена fine, однако, пытаясь ограничить часть локального/пользовательского имени адреса электронной почты, на котором я сталкиваюсь с проблемами, реализующими ограничение на 64 символа. Я перешел через regex101, заменяя + s и * s и пытаясь понять, что делает каждый проход, однако, даже когда я добавляю чек против всех символов без пробелов с лимитом в 64, кажется, что другие проверки проходят и принимают приоритет - хотя я не уверен. Ниже мое регулярное выражение в настоящее время без какого-либо 64 символа проверяет, что я нарушил его:Проверка подлинности электронной почты RegEx имя пользователя/имя локального имени проверка не выполняется

var emailCheck = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.{0,1}([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){1,255}([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){1,255}([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.*$/i);

То, что я до сих пор можно увидеть на http://jsfiddle.net/mtqx0tz1/, я сделал другой незначительным (например, не разрешать последовательные точки), но по большей части это регулярное выражение происходит из другого столбца без ограничений символов.

Наконец, я знаю, что это не «стандарт», так сказать, и электронные письма проверяются на стороне сервера, однако я бы хотел быть более безопасным, чем жаль ... а также работать над некоторыми из мое регулярное выражение. Извините, если этот вопрос не заслуживает фактического поста - я просто не вижу, где в моих проходах {1,64} терпит неудачу. На данный момент я подумываю о том, чтобы просто подстроить часть строки до знака @ и проверять длину таким образом ... но было бы неплохо включить ее в этот оператор, поскольку все проверки выполняются здесь для начала с.

+0

Что, черт возьми, это вещь? Кроме того, почему вы используете '/.../' для создания объекта regex, а затем передаете его в 'new RegExp()', создавая другой объект regex? – melpomene

+0

Почему вы пытаетесь втиснуть все виды проверок в одно регулярное выражение? – melpomene

+0

Сортировка только того, что я нашел haha ​​- нет реальной причины, почему это Франкенштейн сегодня: p Редактировать: Хороший призыв к новому RegExp() - вы можете увидеть, как мой новичок показывает, когда дело доходит до regex haha. Во всяком случае, причина для всех проверок персонажей и странных побегов заключается в том, что эта «страница» запускается через механизм шаблонов, который, к сожалению, не любит видеть такие вещи, как $ где-нибудь. – eric

ответ

-2

Я использовал это регулярное выражение, и он работает хорошо. Адрес электронной почты находится в переменной strIn

try 
      { 
       return Regex.IsMatch(strIn, 
         @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + 
         @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", 
         RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250)); 
      } 
      catch (RegexMatchTimeoutException) 
      { 
       return false; 
      } 
+0

Это позволяет использовать недопустимые имена хостов, такие как '[999.999.999.999]' или 'a__b.01'. Кроме того, неправильный язык программирования. – melpomene

+0

Я ценю помощь, но на месте серверная сторона прекрасна и работает так, как должна ... в любом случае сервлет Java: p. Это, в первую очередь, проблема с интерфейсом. – eric

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