2014-01-20 3 views
0

Я использовал регулярные выражения следующих 2, что я нашел здесь:C# регулярное выражение для неудобной почты и номера телефона

  1. 10 цифр номера телефона с пространством до и после него: @"(?<!\d)\d{10}(?!\d)"

  2. Для электронной почты:

@"(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@" 
        + @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]? 

[0-9] {1,2} | 25 [0-5] | 2 [0-4] [0-9]). " + @" ([0-1]? [0-9] {1,2} | 25 [0-5] | 2 [0-4] [0-9]) ([0-1] [0-9] {1,2} |.? 25 [0-5] | 2 [0-4] [0-9])) {1} | " + @" ([a-zA-Z] + [\ w -] +.) + [A-zA-Z] {2,4}) ";

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

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

[email protected] -email.com *or* [email protected] email.com *or* [email protected] - email.com 

И 10-значный номер телефона выражение извлекает только последние 9 цифр номера, с номером телефона, начиная с 0:

для пг =я только получаю: 123456789, номер телефона находится в тексте: "some text hereand some more here".

Я также обнаружил, что 10-значный номер, можно найти в этой форме: 012/3456789

+0

Что-то, что нужно прочитать перед устранением этой проблемы http://www.regular-expressions.info/email.html – Gusdor

+0

Посмотрите: http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses, вы увидите, что '! # $% & '* + -/=?^_' {} | ~ @ example.org' является допустимым адресом, а также 'postbox @ com', но они не соответствуют вашему регулярному выражению. – Toto

+0

Единственный способ проверить адрес - отправить электронное письмо на этот адрес. В конце концов вы можете проверить '[^ @] + @ [^ @] +' – Toto

ответ

1
  1. Я не верю, что вам нужно использовать смотреть вперед, чтобы соответствовать свой номер телефона. Вы можете сделать что-то вроде " (\d[^0-9a-zA-Z]*?){9}\d ", чтобы соответствовать цифрам точно 10 цифр, с любым видом нежелательных чисел (кроме букв a-z). Осторожно, но это также соответствовало бы вещам, как " 012 à 3456789 ". Если единственная косая черта - единственный возможный разделитель, вы можете использовать " (\d/?){9}\d ": нет ложных срабатываний, но вы не будете сопоставлять неожиданные разделители.

  2. Что касается вопроса электронной почты, официальное полное регулярное выражение довольно длинное. Ссылка Гусдора (http://www.regular-expressions.info/email.html) дает некоторый контекст и простой, который должен соответствовать практически всем используемым адресам электронной почты. Подстройка его немного, чтобы соответствовать вашему делу (this -domain.com или this- domain.org будут соответствовать), вы могли бы использовать что-то вроде этого:

    [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9]*(*?- *)?[a-z0-9]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? 
    

Обычай часть здесь является (*?- *)? добавлен в нужное место.

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