2009-06-02 5 views
66

Для любви к Богу я не получаю этот простой код для работы! Он всегда предупреждает «null», что означает, что строка не соответствует выражению.JavaScript Регулярное выражение Проверка электронной почты

var pattern = "^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$"; 

function isEmailAddress(str) { 

    str = "[email protected]";  

    alert(str.match(pattern)); 
    return str.match(pattern);  

} 
+5

проверки электронной почты трудно , Прагматически вы можете только предположить, что он содержит один @ и что есть хотя бы один. после @ где-то, но это касается действительно, если вы хотите избежать отчуждения хотя бы некоторых из ваших пользователей. Если вы не проверяете конкретный домен, где политика именования электронной почты более структурирована. – AnthonyWJones

+0

Строго говоря, вы даже не можете предположить, что есть. где-то. См. Например, ua ccTLD, который имеет записи MX на верхнем уровне. – Ian

+0

Почему вы не можете использовать type = "email" в форме? @azamsharp –

ответ

60

Если вы определяете регулярное выражение в виде строки, то все обратные косые должны быть экранированы, поэтому вместо «\ ш» вы должны иметь «\\ ш».

С другой стороны, определить его как регулярное выражение:

var pattern = /^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; 

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

Смотрите реальную вещь здесь: http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

+28

Это регулярное выражение не поддерживает такие адреса, как [email protected] –

+0

Это не для какого-либо производственного приложения. Это для небольшой демонстрации, которую я создаю. Спасибо, что указали на это! – azamsharp

+6

не поддерживает электронные письма, такие как [email protected] –

9

Вы можете быть заинтересованы в this question (или this one), в котором подчеркивается тот факт, что определение действительных адресов электронной почты с помощью регулярных выражений является очень трудной задачей решить (если вообще разрешимая)

5

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

0

Было бы лучше использовать:

var pattern = /^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,4}$/;

Это позволяет домены, такие как: whatever.info (4 буквы в конце)

Кроме того, чтобы проверить, используя

pattern.test("[email protected]")

возвращает значение true, если оно работает

http://www.w3schools.com/js/js_obj_regexp.asp

13

Я использую эту функцию на некоторое время. он возвращает логическое значение.

// Validates email address of course. 
function validEmail(e) { 
    var filter = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/; 
    return String(e).search (filter) != -1; 
} 
+1

Я знаю, что это старо, но это можно упростить: return String (e) .match (/^\ s * [\ w \ - \ + _] + (?: \. [\ W \ - \ + _ .?] +) * \ @ [\ ш \ - \ + _] + \ [\ ш \ - \ + _] + (:. \ [\ W \ - \ + _] +) * \ S * $ /); Он вернет null, если нет совпадения, и массив элементов самого адреса электронной почты, если он соответствует. – Andir

+0

Я думаю, что ваше регулярное выражение не проверяет, скажем, nicolas. @ Gmail.com ... Является ли этот RFC822 совместимым? Я не уверен. Кто-нибудь проверять? – nembleton

+0

Он дает [email protected] как истинный – Imran

26

Это тот, который я использую на своей странице.

http://www.zparacha.com/validate-email-address-using-javascript-regular-expression/

/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/

+1

Не поддерживает адресацию «+», то есть «[email protected]». –

+0

Это не удастся для некоторых из [новых доменов] (http://www.names.co.uk/domain-names/new-domain-extensions#domain-directory). – GP89

+0

Молодец и спасибо. Это один из лучших, которые я видел. – RushVan

0

Вы должны иметь в виду, что-г, A-Z, 0-9, _ и -. Не являются единственными допустимыми символами в начале адреса электронной почты.

Gmail, например, позволяет поместить знак «+» в адрес, чтобы «подделать» другое электронное письмо (например, [email protected] также отправит электронное письмо на адрес [email protected]).

micky.o'[email protected] не оценил бы ваш код, останавливая их ввод их адреса ... апострофы отлично действуют в адресах электронной почты.

замыкание «проверить» на действительный адрес электронной почты упомянутого выше, так как он утверждает себя, довольно наивный:

http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/format/emailaddress.js#198

я рекомендую быть очень открытым в вашей стороне клиента код, а затем гораздо больше супертяжелом, как отправив электронное письмо со ссылкой, чтобы действительно проверить, что он «действителен» (как в синтаксически действительном для своего провайдера, так и не ошибочно).

Что-то вроде этого:

var pattern = /[^@][email protected][-a-z\.]\.[a-z\.]{2,6}/

Принимая во внимание, что теоретически вы можете иметь два знака @ в адрес электронной почты, и я даже не включены символы за пределами latin1 в доменных имен!

http://www.eurid.eu/en/eu-domain-names/idns-eu

http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx

2

Вы также можете попробовать это выражение, я проверил это против многих адресов электронной почты.

var pattern = /^[A-Za-z0-9._%+-][email protected]([A-Za-z0-9-]+\.)+([A-Za-z0-9]{2,4}|museum)$/; 
5

Проверка подлинности электронной почты легко ошибается. Поэтому я рекомендую вам использовать Verimail.js.

Почему?

  • Проверка синтаксиса (в соответствии с RFC 822).
  • проверка TLD IANA
  • Орфографического предложение для наиболее распространенной ДВОЙ и почтовых доменов
  • Запретить временные доменов учетных записей электронной почты, такие как mailinator.com
  • jQuery plugin support

Еще одна интересной вещью с Verimail.js является что у него есть орфографическое предложение для наиболее распространенных доменов электронной почты и зарегистрированных TLD. Это может снизить показатель отказов резко для пользователей, которые допускают ошибки распространенных доменных имен, таких как gmail.com, hotmail.com, aol.com, Асо ..

Пример:

Как его использовать?

Самый простой способ - загрузить и включить verimail.jquery.js на свою страницу. После этого Подвод Verimail, выполнив следующую функцию на входе коробке, которая нуждается в проверках:

$("input#email-address").verimail({ 
    messageElement: "p#status-message" 
}); 

Элемент сообщений является необязательным элементом, который отображает сообщение «Invalid адрес электронной почты ..» или «Сделал вы имеете в виду [email protected]? ».Если у вас есть форма и только хотите продолжить, если электронная почта проверяются, вы можете использовать функцию getVerimailStatus, как показано ниже:

if($("input#email-address").getVerimailStatus() < 0){ 
    // Invalid email 
}else{ 
    // Valid email 
} 

getVerimailStatus-функция возвращает целочисленный код в соответствии с объектом Comfirm.AlphaMail.Verimail .Положение дел. Как показано выше, если статус представляет собой отрицательное целочисленное значение, тогда проверка должна рассматриваться как сбой. Но если значение больше или равно 0, то валидацию следует рассматривать как успех.

3

Я использую этот ....

/^[\w._-]+[+]?[\w._-][email protected][\w.-]+\.[a-zA-Z]{2,6}$/ 

Он допускает, что + перед тем @([email protected])

+0

Это единственный образец здесь, который на самом деле работает !! – tborychowski

+0

Нет, есть домен tld длиной более 6 символов, например '.software'. –

8
function isEmailAddress(str) { 
    var pattern =/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
    return pattern.test(str); // returns a boolean 
} 
+0

в соответствии с этим 'test @ test.info' не является адресом электронной почты – tborychowski

0

Простые, но мощные проверки электронной почты для синтаксисе проверки электронной почты:

var EmailId = document.getElementById('Email').value; 
var emailfilter = /^[\w._-]+[+]?[\w._-][email protected][\w.-]+\.[a-zA-Z]{2,6}$/; 
if((EmailId != "") && (!(emailfilter.test(EmailId)))) { 
    msg+= "Enter the valid email address!<br />"; 
} 
+0

' test @ test.info' возвращает false – tborychowski

+0

Я тестировал этот шаблон и работает для всех допустимых комбинаций, таких как 'name.surname @ domain.com' , '[email protected]' и даже для 'name @ domain.info' (домен первого уровня с 4 символами) – shimatai

7

Сом на большинстве страниц регистрации и входа в систему необходимо проверить электронную почту. В этом примере вы узнаете простую проверку электронной почты. Первым делом ввода текста в HTML и вход кнопки, как этот

<input type='text' id='txtEmail'/> 
<input type='submit' name='submit' onclick='checkEmail();'/> 

<script> 
    function checkEmail() { 
     var email = document.getElementById('txtEmail'); 
     var filter = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[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,}))$/; 
     if (!filter.test(email.value)) { 
      alert('Please provide a valid email address'); 
      email.focus; 
      return false; 
     } 
    } 
</script> 

Вы также можете проверить с помощью этого регулярного выражения

<input type='text' id='txtEmail'/> 
<input type='submit' name='submit' onclick='checkEmail();'/> 

<script> 
    function checkEmail() { 

     var email = document.getElementById('txtEmail'); 
     var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 

     if (!filter.test(email.value)) { 
      alert('Please provide a valid email address'); 
      email.focus; 
      return false; 
     } 
    } 
</script> 

Проверить это демо выход, который вы можете проверить здесь

function checkEmail() { 
 
     var email = document.getElementById('txtEmail'); 
 
     var filter = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[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,}))$/; 
 
     if (!filter.test(email.value)) { 
 
      alert('Please provide a valid email address'); 
 
      email.focus; 
 
      return false; 
 
     } 
 
    }
<input type='text' id='txtEmail'/> 
 
<input type='submit' name='submit' onclick='checkEmail();'/>

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

https://www.w3schools.com/jsref/jsref_obj_regexp.asp

надеюсь, что это поможет вам

+0

Что такое' {2,4} ', если у вас есть' + 'после этого? – developerbmw

+0

, то он покажет недействительный адрес электронной почты, вы можете дать мне примерный адрес электронной почты? –

7

с более простой

Вот оно:

var regexEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; 
var email = document.getElementById("txtEmail"); 

if (regexEmail.test(email.value)) { 
    alert("It's Okay") 
} else { 
    alert("Not Okay") 

} 

удачи.

+0

на момент написания этого, это сработало хорошо ... будем надеяться, что он останется таким, как я прошел через немало из них;) –

+1

'HUEI90 @ gmail.com'' пройдет этот шаблон, , но добавив^=> '/^\ w + ([- +. '] \ w +) * @ \ w + ([-.] \ w +) * \. \ w + ([-.] \ w +) * /' может исправить проблема –

0
var emailRegex = /^[A-Z0-9_'%=+!`#~$*?^{}&|-]+([\.][A-Z0-9_'%=+!`#~$*?^{}&|-]+)*@[A-Z0-9-]+(\.[A-Z0-9-]+)+$/i; 
if(emailRegex.test('yoursamplemail')) 
alert('valid'); 
else 
alert('invalid'); 
-1

Вы можете добавить функцию в строку объекта

//Add this wherever you like in your javascript code 
String.prototype.isEmail = function() { 
    return !!this.match(/^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$/); 
} 

var user_email = "[email protected]"; 

if(user_email.isEmail()) { 
    //Email is valid ! 
} else { 
    //Email is invalid ! 
} 
2

Литтл опоздал на вечеринку, но здесь ничего не выходит ...

function isEmailValid(emailAdress) { 
    var EMAIL_REGEXP = new RegExp('^[a-z0-9]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,15})$', 'i'); 
    return EMAIL_REGEXP.test(emailAdress) 
} 

http://jsfiddle.net/yrshaikh/xvd6H/

+0

'a @ c om' не является действительным адресом электронной почты, и он проходит этот шаблон – tborychowski

+0

, это регулярное выражение не было тщательно протестировано. – Brandon

+0

@ Брандон хорошо и? – Yasser