2013-04-24 28 views
8

Sto tentando di creare un'espressione per convalidare gli indirizzi Gmail. Questo è quello che ho fatto finora.Espressione regolare: convalida degli indirizzi Gmail

`^ ([\ w] [\ w.] (?!.) @ Gmail.com) Sto tentando di creare un'espressione per convalidare gli indirizzi Gmail. Questo è quello che ho fatto finora.

Ma non funziona come voglio.

Gmail indirizzo:

  1. primo e l'ultimo carattere deve essere [a-z0-9] solo
  2. Il contenuto nome utente [a-z0-9.]
  3. Non ci possono essere periodi consecutivi (i.e: [email protected] [This is wrong])
  4. La lunghezza del nome utente deve essere compresa tra 6 e 30 lettere.

Essendo onesto, non ho molta esperienza con le espressioni regolari.

A proposito, c'è una documentazione per l'espressione regolare?

+1

Inoltre, la parte prima del '@' deve essere almeno 6 caratteri alfanumerici ** (punti non inclusi!). –

+3

Se questo è un incarico che * presuppone * determinati requisiti per gli indirizzi GMail, va bene - ma i requisiti che dichiari non sono quelli che GMail effettivamente applica. I doppi punti nel nome sono permessi (e ignorati), così come un suffisso che inizia con '+'. La parte del nome e il nome del dominio "gmail.com" non fanno distinzione tra maiuscole e minuscole, quindi sono consentite lettere maiuscole. Non conosco tutte le regole. Qual è il tuo vero obiettivo? (È difficile pensare a un'applicazione in cui si desideri convalidare indirizzi Gmail e * solo * indirizzi Gmail.) –

+2

Per espandere la risposta di @KeithThompson. I requisiti per le espressioni regolari soddisfano le ** condizioni di registrazione ** per gli indirizzi Gmail. Stai trascurando il fatto che gmail ti permette di aggiungere un + alla fine del tuo nome utente, e quindi qualsiasi testo dopo di esso che desideri. Permette anche di aggiungere qualsiasi numero di punti (anche all'inizio/fine del nome utente). Accetta anche indirizzi con diverse lettere maiuscole. Le vostre cattive specifiche rendono inutile la regex nel mondo reale. Staresti meglio con una [regex ufficiale conforme] (http://stackoverflow.com/a/201378/1208914) – stormCloud

risposta

14

Non hai detto quale implementazione di espressioni regolari usi.

^[a-z0-9](\.?[a-z0-9]){5,}@g(oogle)?mail\.com$ 
  • [a-z0-9] primo carattere
  • (\.?[a-z0-9]){5,} almeno cinque seguenti caratteri alfanumerici, forse preceduta da un punto (vedere @ il commento di Daniel, copiato da @ risposta di Christopher)
  • g(oogle)?mail gmail o googlemail (vedere @ risposta di Alroc)

Probabilmente si vorrà anche utilizzare la corrispondenza del modello senza distinzione tra maiuscole e minuscole. (/.../i in JavaScript.)

+0

Corrisponde a 'a @ gmail.com' a causa di ciò'? ', È quello previsto? –

+0

@ChristopherCreutzig, no, non lo era. Corretto. Grazie! – kay

+0

Inoltre, il '{4,}' conta anche i punti. Vedi la mia risposta per un'alternativa che non ha e non ha bisogno di guardare avanti. –

7

semplice espressione regolare per la corrispondenza Gmail:

^[\w.+\-][email protected]\.com$ 

Partite, se all'inizio della stringa c'è \w (alfanumerico o di sottolineatura carattere) o . o + o -, una o più volte, seguito da @gmail.com alla fine della stringa.

È possibile testarlo in regexpal.

A proposito, c'è una documentazione per l'espressione regolare?

Google is your friend :)

+0

grazie, link utile lì – Erich

+1

Grazie, ma questo non è quello che voglio. La tua espressione corrisponde a questi esempi (.aabb @ gmail.com | aa..bb @ gmail.com | aabb. @ Gmail.com) e questo è sbagliato. –

+0

Per quale motivo usi '\ W'? – kay

0

a rispondere alle sue altra domanda:

Questo è un link alla documentazione regex: http://www.regular-expressions.info/ C'è più di aiuto per la lingua specifica che si sta utilizzando semplicemente googleing "myLanguage regex"

+0

Grazie. Sarebbe utile. –

1

C'è molta documentazione per le espressioni regolari, ma dovrai assicurarti di ottenere una corrispondenza con il particolare sapore della regex del tuo ambiente. Sì, ci sono numerosi dialetti. Ciò detto "Mastering Regular Expressions" è, per quanto ne so, ancora il riferimento finale.

Quanto alla tua domanda specifica, probabilmente sarei uso

^[a-z0-9](\.?[a-z0-9]){5,}@gmail\.com$ 

Caveat: Non ho controllato se le regole hai dato siano corrette. Gli indirizzi e-mail in generale non li seguono di certo.

+0

Grazie Christopher, ma l'espressione che hai scritto '^ [a-z0-9] (\.? [a-z0-9]) {5,29} @gmail \ .com $ 'corrisponde a '[email protected]' e questo non è quello che voglio . Ed è per questo che ho accettato la risposta di Kay. –

+0

Dovresti accettare qualunque cosa tu pensi sia giusto, ovviamente - ma a parte il fatto che non ho scritto '{5,29}' dato che avrei messo quella restrizione in un secondo test, sono curioso di sapere come La risposta di Kay è davvero diversa dalla mia. Per quanto posso vedere, ha copiato la parte locale che avevo suggerito e la sua versione precedente non ha verificato la presenza di almeno sei caratteri non punti. –

1

RFC 2822 specifica cosa costituisce un indirizzo di posta elettronica valido, e questo è discusso here. Ma come nota quella pagina, non puoi accettarla senza realmente leggere e capire cosa sta facendo.

Sei qui in un vantaggio, poiché ti aspetti che l'indirizzo termini sempre nello @gmail.com, che riduce l'ambito della tua espressione regolare (puoi dividere lo @ e convalidare solo il primo semestre).

BTW, GMail non è gmail.com in tutto il mondo - nel Regno Unito e in Germania, troverete anche googlemail.com.

C'è molta documentazione sulle espressioni regolari in tutto il web, ma dovresti assicurarti di leggere su come la libreria/il motore che stai usando gestisce le cose. Ci sono lievi variazioni tra le implementazioni.

+0

Grazie, questa informazione è davvero utile. –

0
/([a-zA-Z0-9]+)([\_\.\-{1}])?([a-zA-Z0-9]+)\@([a-zA-Z0-9]+)([\.])([a-zA-Z\.]+)/g 

Questo è l'espressione regolare per gli indirizzi di posta elettronica che convalidare tutti gli indirizzi e-mail.

  1. ([a-zA-Z0-9] +) - abbinerà per prima parola che può avere az, AZ e 0-9
  2. ([_.- {1}]) - corrisponderà a _, -,. dopo la prima parola
  3. ? - corrisponderà tra 0 (falso) e 1 (vero) del token precedente.
  4. ([a-zA-Z0-9] +) - abbinerà per seconda parola che può avere az, AZ e 0-9
  5. \ @ - corrisponderà carattere speciale @
  6. ([a-zA-Z0-9] +) - corrisponderà alla parola che è il nome di dominio dopo @
  7. ([.]) - corrisponderà.
  8. ([a-zA-Z.] +) - corrisponderà all'ultima parola finale dell'ID di posta elettronica che può essere com, co.in, org, ecc.

Ma Gmail non permette altri caratteri speciali da utilizzare in modo per l'indirizzo Gmail e-mail l'espressione regolare sarà più facile di questo e sarà come il seguente:

/([a-zA-Z0-9]+)([\.{1}])?([a-zA-Z0-9]+)\@gmail([\.])com/g 
  1. ([a -zA-Z0-9] +) - corrisponderà per prima parola che può avere az, AZ e 0-9
  2. ([{1}]) -. corrisponderà. dopo la prima parola
  3. ? - corrisponderà tra 0 (falso) e 1 (vero) del token precedente.
  4. ([a-zA-Z0-9] +) - abbinerà per seconda parola che può avere az, AZ e 0-9
  5. \ @ - corrisponderà carattere speciale @
  6. gmail - corrisponderà alla parola gmail che è il nome di dominio dopo @
  7. ([.]) - corrisponderà.
  8. com - corrisponderà l'ultima parola finale del id-mail che sarà com
1

La mia soluzione per questo è ^[a-zA-Z][-_.a-zA-Z0-9]{5,29}@g(oogle)?mail.com$

Problemi correlati