01: /*
02: * Copyright (C) 2002-2006 Les Hazlewood
03: *
04: * This library is free software; you can redistribute it and/or modify it
05: * under the terms of the GNU Lesser General Public License as published
06: * by the Free Software Foundation; either version 2.1 of the License, or
07: * (at your option) any later version.
08: *
09: * This library is distributed in the hope that it will be useful, but
10: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
12: * Public License for more details.
13: *
14: * You should have received a copy of the GNU Lesser General Public License
15: * along with this library; if not, write to the
16: *
17: * Free Software Foundation, Inc.
18: * 59 Temple Place, Suite 330
19: * Boston, MA 02111-1307
20: * USA
21: *
22: * Or, you may view it online at
23: * http://www.opensource.org/licenses/lgpl-license.php
24: */
25:
26: package org.netbeans.modules.mercurial;
27:
28: import java.util.regex.Pattern;
29:
30: public class HgMail {
31:
32: /* Validation of email address from www.leshazlewood.com */
33:
34: //RFC 2822 token definitions for valid email - only used together to form a java Pattern object:
35: private static final String sp = "\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~"; // NOI18N
36: private static final String atext = "[a-zA-Z0-9" + sp + "]"; // NOI18N
37: private static final String atom = atext + "+"; // NOI18N //one or more atext chars
38: private static final String dotAtom = "\\." + atom; // NOI18N
39: private static final String localPart = atom + "(" + dotAtom + ")*"; // NOI18N //one atom followed by 0 or more dotAtoms.
40:
41: //RFC 1035 tokens for domain names:
42: private static final String letter = "[a-zA-Z]"; // NOI18N
43: private static final String letDig = "[a-zA-Z0-9]"; // NOI18N
44: private static final String letDigHyp = "[a-zA-Z0-9-]"; // NOI18N
45: public static final String rfcLabel = letDig + letDigHyp + "{0,61}"
46: + letDig; // NOI18N
47: private static final String domain = rfcLabel + "(\\." + rfcLabel
48: + ")*\\." + letter + "{2,6}"; // NOI18N
49:
50: //Combined together, these form the allowed email regexp allowed by RFC 2822:
51: private static final String addrSpec = "^" + localPart + "@"
52: + domain + "$"; // NOI18N
53:
54: //now compile it:
55: public static final Pattern VALID_PATTERN = Pattern
56: .compile(addrSpec);
57:
58: public static Boolean isUserNameValid(String name) {
59: /*
60: * Names of the form username@domain
61: * and text <username@domain> are allowed
62: */
63: name = name.trim();
64: if (name.endsWith(">")) { // NOI18N
65: int startbr = name.lastIndexOf("<"); // NOI18N
66: if (startbr != -1) {
67: String newName = name.substring(startbr + 1, name
68: .length() - 1);
69: return VALID_PATTERN.matcher(newName).matches();
70: }
71: return false;
72: }
73: return VALID_PATTERN.matcher(name).matches();
74: }
75: }
|