Порожній рядок або електронна пошта Regex


127

Я знайшов багато перевірки електронної пошти Regex в SO, але я не знайшов жодного, який би прийняв порожню рядок. Це можливо лише через Regex? Ви приймаєте або порожній рядок, або лише електронну пошту? Я хочу це мати лише на Regex.

Відповіді:


311

Цей шаблон регулярного вираження буде відповідати порожній рядку:

^$

І це відповідатиме (грубо) електронному листу чи порожній рядку:

(^$|^.*@.*\..*$)

1
Щось, що слід врахувати, робити ^ (|. * ​​@. * \ .. *) $ має мати такий самий ефект, як він говорить або порожній, або це, використовуючи лише один раз ^ і $, щоб трохи приправити його.
Рунево

1
Це досить старе, але я просто натрапив на це і у мене виникли проблеми з відповіддю. Бувають випадки, коли початок рядка приховано, але все ще відповідає ^, де ефективно ви шукаєте електронну пошту або нічого в середині рядка. Для цього (email_regex)?краще підходить.
jclancy

Не забудьте прочитати інформацію про те, наскільки надзвичайно складна перевірка електронної пошти, перш ніж намагатися використовувати RegEx для цього. stackoverflow.com/questions/201323 / ...
Bryan Kennedy

Це буде відповідати наступному електронному листу test.test@test. Це краще, я думаю, що ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $, оскільки він прийме електронні листи, такі як test@test.se
dont_trust_me

У конкретному додатку Java ^$це не працює, але ^(?!.)робить: [ ^початок рядка, (?!)негативний пошук, .будь-який символ - не включаючи
linefeed

8

відповідність порожнього рядка або електронної пошти

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

відповідність порожнього рядка або електронної пошти, але також відповідність будь-якої кількості пробілів

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

див. докладніше про сам регулярний вирівнювання електронної пошти:

http://www.regular-expressions.info/email.html


2

Наведені вище відповіді працюють ($ для порожнього), але я просто спробував це, і він також працює, щоб просто залишити порожнім так:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Те саме в зворотному порядку

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

Не співставляйте електронний лист із регулярним виразом. Це надзвичайно потворно, довго і складно, і ваш аналізатор регулярних виразів, мабуть, не може впоратися з цим у будь-якому випадку. Спробуйте знайти звичайну бібліотеку для їх узгодження. Якщо ви хочете вирішити лише практичне проблему відповідності адреси електронної пошти (тобто, якщо ви хочете неправильного коду, який трапляється (як правило)), скористайтеся посиланням regular-expressions.info, який подав хтось інший.

Що стосується порожнього рядка, ^$він згадується кількома людьми і буде добре працювати.


13
Насправді з некрасивим регулярним виразом можуть бути вирішені аналізатори. Не використовувати регулярний вираз лише тому, що це некрасиво - це нерозумно.
Пітер

Це не конструктивно. RegEx перевірений (і далеко не потворний - ви б сказали, що це дуже елегантно, як це працює?). Невиразна пропозиція бібліотеки без будь-яких вказівок на можливе рішення перемагає мету взагалі відповісти. Кожному потрібно зробити закладку: code.tutsplus.com/tutorials/…
pimbrouwers

Regexes, як відомо, важко читати, підтримувати та налагоджувати, що робить їх головним кандидатом на заміну викликом до бібліотеки.
einnocent

2
Для запису: Я б радий рекомендувати певну бібліотеку, якби знав, якою мовою використовує ОП. Оскільки це мовно-агностичне питання, мої варіанти досить обмежені.
Кевін

2
Regex не повинен бути гарним. За цією логікою ніхто ніколи не повинен використовувати регулярний вираз. Якщо ви настільки налаштовані на те, що бібліотека замінює її, що ви думаєте, що робитиме бібліотека? Це або буде мати дуже довгий, складний код, або він буде використовувати regex ... До цього моменту ви також можете просто реалізувати власну "бібліотеку". І в наш час, якщо хтось не знає, як використовувати регулярний вираз, їм, мабуть, не слід мати завдання перевіряти адреси електронної пошти все одно ...
Ендрю

0

це вирішить, він прийме порожній рядок або точний ідентифікатор електронної пошти

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

2
ви можете бути трохи більш описовим.
Vinay Prajapati

0

Я вважаю /^\s+$|^$/giза краще збігати порожні та порожні місця.

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));


3
Якщо ви використовуєте ^ \ s * $, тобі або регістру не потрібен. Також немає необхідності в модифікаторах g або i, оскільки це відповідає всій лінії і не включає жодних символів з регістру.
Cadoo

0

Якщо ви використовуєте його в межах рейок - активну перевірку запису можна встановити allow_blank: true

Як:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.