Re: Checking for a valid email address
- From
- demerphq <demerphq@gmail.com>
- Date
- Feb 27, 2009, 09:25 UTC
- Message-ID
- <9b18b3110902270125p76ac118ckd21cb2d427940db2@mail.gmail.com>
- In-Reply-To
- <9b18b3110902270120t15babbc0oe2975c086297e1e0@mail.gmail.com>
2009/2/27 demerphq <demerphq@gmail.com>:
Show 71 quoted lines
> 2009/2/27 Adam Mercer <ramercer@gmail.com>:
>> Hi
>>
>> We are in the process of migrating some of our repositories from CVS
>> to Git in a two step process, first to a centralised Git setup then
>> (hopefully) onto a more distributed development model. In the testing
>> we have been doing so far the only problem we have run into is
>> developers not setting their email addresses correctly so the
>> changelogs are filled with spurious address. Does anyone know of a
>> pre-commit hook that could check for a valid email address prior to
>> allowing a commit? Or another way that this can be acheived?
>
> If you are using Perl 5.10 or later then you can use the following regex:
>
> my $email = qr {
> (?(DEFINE)
> (?<address> (?&mailbox) | (?&group))
> (?<mailbox> (?&name_addr) | (?&addr_spec))
> (?<name_addr> (?&display_name)? (?&angle_addr))
> (?<angle_addr> (?&CFWS)? < (?&addr_spec) > (?&CFWS)?)
> (?<group> (?&display_name) : (?:(?&mailbox_list) | (?&CFWS))? ;
> (?&CFWS)?)
> (?<display_name> (?&phrase))
> (?<mailbox_list> (?&mailbox) (?: , (?&mailbox))*)
>
> (?<addr_spec> (?&local_part) \@ (?&domain))
> (?<local_part> (?&dot_atom) | (?"ed_string))
> (?<domain> (?&dot_atom) | (?&domain_literal))
> (?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)?
> \] (?&CFWS)?)
> (?<dcontent> (?&dtext) | (?"ed_pair))
> (?<dtext> (?&NO_WS_CTL) | [\x21-\x5a\x5e-\x7e])
>
> (?<atext> (?&ALPHA) | (?&DIGIT) | [!#\$%&'*+-/=?^_`{|}~])
> (?<atom> (?&CFWS)? (?&atext)+ (?&CFWS)?)
> (?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)?)
> (?<dot_atom_text> (?&atext)+ (?: \. (?&atext)+)*)
>
> (?<text> [\x01-\x09\x0b\x0c\x0e-\x7f])
> (?<quoted_pair> \\ (?&text))
>
> (?<qtext> (?&NO_WS_CTL) | [\x21\x23-\x5b\x5d-\x7e])
> (?<qcontent> (?&qtext) | (?"ed_pair))
> (?<quoted_string> (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))*
> (?&FWS)? (?&DQUOTE) (?&CFWS)?)
>
> (?<word> (?&atom) | (?"ed_string))
> (?<phrase> (?&word)+)
>
> # Folding white space
> (?<FWS> (?: (?&WSP)* (?&CRLF))? (?&WSP)+)
> (?<ctext> (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e])
> (?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment))
> (?<comment> \( (?: (?&FWS)? (?&ccontent))* (?&FWS)? \) )
> (?<CFWS> (?: (?&FWS)? (?&comment))*
> (?: (?:(?&FWS)? (?&comment)) | (?&FWS)))
>
> # No whitespace control
> (?<NO_WS_CTL> [\x01-\x08\x0b\x0c\x0e-\x1f\x7f])
>
> (?<ALPHA> [A-Za-z])
> (?<DIGIT> [0-9])
> (?<CRLF> \x0d \x0a)
> (?<DQUOTE> ")
> (?<WSP> [\x20\x09])
> )
>
> (?&address)
> }x;
>
> which is a fully RFC compliant perl regex for validating any email address.Er, i meant validating whether any email address is well formed of course.
Cheers, yves
-- perl -Mre=debug -e "/just|another|perl|hacker/"