1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Text.RegularExpressions;
5
6
namespace CoreWebLibrary.Text.RegularExpressions
7
{
8
/**//// <summary>
9
/// A utility class containing frequently used Regular Expression Patterns
10
/// and two utility methods to see if a passed string conforms to the designated
11
/// pattern.
12
/// </summary>
13
public class Patterns
14
{
15
16
public const string EMAIL = @"^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$" ;
17
18
public const string US_ZIPCODE = @"^\d{5}$" ;
19
public const string US_ZIPCODE_PLUS_FOUR = @"^\d{5}((-|\s)?\d{4})$";
20
public const string US_ZIPCODE_PLUS_FOUR_OPTIONAL = @"^\d{5}((-|\s)?\d{4})?$" ;
21
22
/**//// <summary>
23
/// Permissive US Telephone Regex. Does not allow extensions.
24
/// </summary>
25
/// <example>
26
/// Allows: 324-234-3433, 3242343434, (234)234-234, (234) 234-2343
27
/// </example>
28
public const string US_TELEPHONE = @"^([\(]{1}[0-9]{3}[\)]{1}[\.| |\-]{0,1}|^[0-9]{3}[\.|\-| ]?)?[0-9]{3}(\.|\-| )?[0-9]{4}$";
29
30
/**//// <summary>
31
/// This matches a url in the generic format
32
/// scheme://authority/path?query#fragment
33
/// </summary>
34
/// <example>
35
/// Allows: http://www.yahoo.com, https://www.yahoo.com, ftp://www.yahoo.com
36
/// </example>
37
public const string URL = @"^(?<Protocol>\w+):\/\/(?<Domain>[\w.]+\/?)\S*$";
38
39
/**//// <summary>
40
/// This matches an ip address in the format xxx-xxx-xxx-xxx
41
/// each group of xxx must be less than or equal to 255
42
/// </summary>
43
/// <example>
44
/// Allows: 123.123.123.123, 192.168.1.1
45
/// </example>
46
public const string IP_ADDRESS = @"^(?<First>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Second>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Third>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Fourth>2[0-4]\d|25[0-5]|[01]?\d\d?)$";
47
48
/**//// <summary>
49
/// This matches a date in the format mm/dd/yy
50
/// </summary>
51
/// <example>
52
/// Allows: 01/05/05, 12/30/99, 04/11/05
53
/// Does not allow: 01/05/2000, 2/2/02
54
/// </example>
55
public const string DATE_MM_DD_YY = @"^(1[0-2]|0[1-9])/(([1-2][0-9]|3[0-1]|0[1-9])/\d\d)$";
56
57
58
/**//// <summary>
59
/// This matches a date in the format mm/yy
60
/// </summary>
61
/// <example>
62
/// Allows: 01/05, 11/05, 04/99
63
/// Does not allow: 1/05, 13/05, 00/05
64
/// </example>
65
public const string DATE_MM_YY = @"^((0[1-9])|(1[0-2]))\/(\d{2})$";
66
67
68
/**//// <summary>
69
/// This matches only numbers(no decimals)
70
/// </summary>
71
/// <example>
72
/// Allows: 0, 1, 123, 4232323, 1212322
73
/// </example>
74
public const string IS_NUMBER_ONLY = @"^([1-9]\d*)$|^0$";
75
76
/**//// <summary>
77
/// This matches any string with only alpha characters upper or lower case(A-Z)
78
/// </summary>
79
/// <example>
80
/// Allows: abc, ABC, abCd, AbCd
81
/// Does not allow: A C, abc!, (a,b)
82
/// </example>
83
public const string IS_ALPHA_ONLY = @"^[a-zA-Z]+$";
84
85
/**//// <summary>
86
/// This matches any string with only upper case alpha character(A-Z)
87
/// </summary>
88
public const string IS_UPPER_CASE = @"^[A-Z]+$";
89
90
/**//// <summary>
91
/// This matches any string with only lower case alpha character(A-Z)
92
/// </summary>
93
public const string IS_LOWER_CASE = @"^[a-z]+$";
94
95
/**//// <summary>
96
/// Ensures the string only contains alpha-numeric characters, and
97
/// not punctuation, spaces, line breaks, etc.
98
/// </summary>
99
/// <example>
100
/// Allows: ab2c, 112ABC, ab23Cd
101
/// Does not allow: A C, abc!, a.a
102
/// </example>
103
public const string IS_ALPHA_NUMBER_ONLY = @"^[a-zA-Z0-9]+$";
104
105
/**//// <summary>
106
/// Validates US Currency. Requires $ sign
107
/// Allows for optional commas and decimal.
108
/// No leading zeros.
109
/// </summary>
110
/// <example>Allows: $100,000 or $10000.00 or $10.00 or $.10 or $0 or $0.00
111
/// Does not allow: $0.10 or 10.00 or 10,000</example>
112
public const string IS_US_CURRENCY = @"^\$(([1-9]\d*|([1-9]\d{0,2}(\,\d{3})*))(\.\d{1,2})?|(\.\d{1,2}))$|^\$[0](.00)?$";
113
114
/**//// <summary>
115
/// Matches major credit cards including: Visa (length 16, prefix 4);
116
/// Mastercard (length 16, prefix 51-55);
117
/// Diners Club/Carte Blanche (length 14, prefix 36, 38, or 300-305);
118
/// Discover (length 16, prefix 6011);
119
/// American Express (length 15, prefix 34 or 37).
120
/// Saves the card type as a named group to facilitate further validation
121
/// against a "card type" checkbox in a program.
122
/// All 16 digit formats are grouped 4-4-4-4 with an optional hyphen or space
123
/// between each group of 4 digits.
124
/// The American Express format is grouped 4-6-5 with an optional hyphen or space
125
/// between each group of digits.
126
/// Formatting characters must be consistant, i.e. if two groups are separated by a hyphen,
127
/// all groups must be separated by a hyphen for a match to occur.
128
/// </summary>
129
public const string CREDIT_CARD = @"^(?:(?<Visa>4\d{3})|(?<Mastercard>5[1-5]\d{2})|(?<Discover>6011)|(?<DinersClub>(?:3[68]\d{2})|(?:30[0-5]\d))|(?<AmericanExpress>3[47]\d{2}))([ -]?)(?(DinersClub)(?:\d{6}\1\d{4})|(?(AmericanExpress)(?:\d{6}\1\d{5})|(?:\d{4}\1\d{4}\1\d{4})))$";
130
131
/**//// <summary>
132
/// Matches social security in the following format xxx-xx-xxxx
133
/// where x is a number
134
/// </summary>
135
/// <example>
136
/// Allows: 123-45-6789, 232-432-1212
137
/// </example>
138
public const string SOCIAL_SECURITY = @"^\d{3}-\d{2}-\d{4}$";
139
140
/**//// <summary>
141
/// Matches x,x where x is a name, spaces are only allowed between comma and name
142
/// </summary>
143
/// <example>
144
/// Allows: christophersen,eric; christophersen, eric
145
/// Not allowed: christophersen ,eric;
146
/// </example>
147
public const string NAME_COMMA_NAME = @"^[a-zA-Z]+,\s?[a-zA-Z]+$";
148
149
private Patterns()
150
{
151
}
152
153
/**//// <summary>
154
/// Checks to see if the passed input has the passed pattern
155
/// </summary>
156
/// <param name="pattern">The pattern to use</param>
157
/// <param name="input">The input to check</param>
158
/// <returns>True if the input has the pattern, false otherwise</returns>
159
public static bool HasPattern( string pattern, string input )
160
{
161
Regex regEx = new Regex(pattern);
162
return regEx.IsMatch(input);
163
}
164
165
/**//// <summary>
166
/// Checks the passed input to make sure it has all the patterns in the
167
/// passed patterns array
168
/// </summary>
169
/// <param name="patterns">Array of patterns</param>
170
/// <param name="input">String value to check</param>
171
/// <returns>True if the input has all of the patterns, false otherwise.</returns>
172
public static bool HasPatterns(string[] patterns, string input)
173
{
174
for (int i = 0; i < patterns.Length; i++)
175
{
176
if (Patterns.HasPattern(patterns[i], input) == false)
177
return false;
178
}
179
180
return true;
181
}
182
}
183
using System;2
using System.Collections.Generic;3
using System.Text;4
using System.Text.RegularExpressions;5

6
namespace CoreWebLibrary.Text.RegularExpressions7
{8
/**//// <summary>9
/// A utility class containing frequently used Regular Expression Patterns10
/// and two utility methods to see if a passed string conforms to the designated 11
/// pattern.12
/// </summary>13
public class Patterns14
{15
16
public const string EMAIL = @"^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$" ;17

18
public const string US_ZIPCODE = @"^\d{5}$" ;19
public const string US_ZIPCODE_PLUS_FOUR = @"^\d{5}((-|\s)?\d{4})$";20
public const string US_ZIPCODE_PLUS_FOUR_OPTIONAL = @"^\d{5}((-|\s)?\d{4})?$" ;21

22
/**//// <summary>23
/// Permissive US Telephone Regex. Does not allow extensions.24
/// </summary>25
/// <example>26
/// Allows: 324-234-3433, 3242343434, (234)234-234, (234) 234-234327
/// </example>28
public const string US_TELEPHONE = @"^([\(]{1}[0-9]{3}[\)]{1}[\.| |\-]{0,1}|^[0-9]{3}[\.|\-| ]?)?[0-9]{3}(\.|\-| )?[0-9]{4}$";29

30
/**//// <summary>31
/// This matches a url in the generic format 32
/// scheme://authority/path?query#fragment33
/// </summary>34
/// <example>35
/// Allows: http://www.yahoo.com, https://www.yahoo.com, ftp://www.yahoo.com36
/// </example>37
public const string URL = @"^(?<Protocol>\w+):\/\/(?<Domain>[\w.]+\/?)\S*$";38

39
/**//// <summary>40
/// This matches an ip address in the format xxx-xxx-xxx-xxx41
/// each group of xxx must be less than or equal to 25542
/// </summary>43
/// <example>44
/// Allows: 123.123.123.123, 192.168.1.145
/// </example>46
public const string IP_ADDRESS = @"^(?<First>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Second>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Third>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Fourth>2[0-4]\d|25[0-5]|[01]?\d\d?)$";47

48
/**//// <summary>49
/// This matches a date in the format mm/dd/yy50
/// </summary>51
/// <example>52
/// Allows: 01/05/05, 12/30/99, 04/11/0553
/// Does not allow: 01/05/2000, 2/2/0254
/// </example> 55
public const string DATE_MM_DD_YY = @"^(1[0-2]|0[1-9])/(([1-2][0-9]|3[0-1]|0[1-9])/\d\d)$"; 56

57

58
/**//// <summary>59
/// This matches a date in the format mm/yy60
/// </summary>61
/// <example>62
/// Allows: 01/05, 11/05, 04/9963
/// Does not allow: 1/05, 13/05, 00/0564
/// </example>65
public const string DATE_MM_YY = @"^((0[1-9])|(1[0-2]))\/(\d{2})$";66

67
68
/**//// <summary>69
/// This matches only numbers(no decimals)70
/// </summary>71
/// <example>72
/// Allows: 0, 1, 123, 4232323, 121232273
/// </example>74
public const string IS_NUMBER_ONLY = @"^([1-9]\d*)$|^0$";75
76
/**//// <summary>77
/// This matches any string with only alpha characters upper or lower case(A-Z)78
/// </summary>79
/// <example>80
/// Allows: abc, ABC, abCd, AbCd81
/// Does not allow: A C, abc!, (a,b)82
/// </example>83
public const string IS_ALPHA_ONLY = @"^[a-zA-Z]+$"; 84

85
/**//// <summary>86
/// This matches any string with only upper case alpha character(A-Z)87
/// </summary>88
public const string IS_UPPER_CASE = @"^[A-Z]+$";89
90
/**//// <summary>91
/// This matches any string with only lower case alpha character(A-Z)92
/// </summary>93
public const string IS_LOWER_CASE = @"^[a-z]+$";94
95
/**//// <summary>96
/// Ensures the string only contains alpha-numeric characters, and97
/// not punctuation, spaces, line breaks, etc.98
/// </summary>99
/// <example>100
/// Allows: ab2c, 112ABC, ab23Cd101
/// Does not allow: A C, abc!, a.a102
/// </example>103
public const string IS_ALPHA_NUMBER_ONLY = @"^[a-zA-Z0-9]+$";104

105
/**//// <summary>106
/// Validates US Currency. Requires $ sign107
/// Allows for optional commas and decimal. 108
/// No leading zeros. 109
/// </summary>110
/// <example>Allows: $100,000 or $10000.00 or $10.00 or $.10 or $0 or $0.00111
/// Does not allow: $0.10 or 10.00 or 10,000</example>112
public const string IS_US_CURRENCY = @"^\$(([1-9]\d*|([1-9]\d{0,2}(\,\d{3})*))(\.\d{1,2})?|(\.\d{1,2}))$|^\$[0](.00)?$";113

114
/**//// <summary>115
/// Matches major credit cards including: Visa (length 16, prefix 4); 116
/// Mastercard (length 16, prefix 51-55);117
/// Diners Club/Carte Blanche (length 14, prefix 36, 38, or 300-305); 118
/// Discover (length 16, prefix 6011); 119
/// American Express (length 15, prefix 34 or 37). 120
/// Saves the card type as a named group to facilitate further validation 121
/// against a "card type" checkbox in a program. 122
/// All 16 digit formats are grouped 4-4-4-4 with an optional hyphen or space 123
/// between each group of 4 digits. 124
/// The American Express format is grouped 4-6-5 with an optional hyphen or space 125
/// between each group of digits. 126
/// Formatting characters must be consistant, i.e. if two groups are separated by a hyphen, 127
/// all groups must be separated by a hyphen for a match to occur.128
/// </summary>129
public const string CREDIT_CARD = @"^(?:(?<Visa>4\d{3})|(?<Mastercard>5[1-5]\d{2})|(?<Discover>6011)|(?<DinersClub>(?:3[68]\d{2})|(?:30[0-5]\d))|(?<AmericanExpress>3[47]\d{2}))([ -]?)(?(DinersClub)(?:\d{6}\1\d{4})|(?(AmericanExpress)(?:\d{6}\1\d{5})|(?:\d{4}\1\d{4}\1\d{4})))$";130

131
/**//// <summary>132
/// Matches social security in the following format xxx-xx-xxxx133
/// where x is a number134
/// </summary>135
/// <example>136
/// Allows: 123-45-6789, 232-432-1212137
/// </example>138
public const string SOCIAL_SECURITY = @"^\d{3}-\d{2}-\d{4}$";139

140
/**//// <summary>141
/// Matches x,x where x is a name, spaces are only allowed between comma and name142
/// </summary>143
/// <example>144
/// Allows: christophersen,eric; christophersen, eric145
/// Not allowed: christophersen ,eric;146
/// </example>147
public const string NAME_COMMA_NAME = @"^[a-zA-Z]+,\s?[a-zA-Z]+$";148
149
private Patterns()150
{151
}152

153
/**//// <summary>154
/// Checks to see if the passed input has the passed pattern155
/// </summary>156
/// <param name="pattern">The pattern to use</param>157
/// <param name="input">The input to check</param>158
/// <returns>True if the input has the pattern, false otherwise</returns>159
public static bool HasPattern( string pattern, string input )160
{161
Regex regEx = new Regex(pattern);162
return regEx.IsMatch(input);163
}164

165
/**//// <summary>166
/// Checks the passed input to make sure it has all the patterns in the 167
/// passed patterns array168
/// </summary>169
/// <param name="patterns">Array of patterns</param>170
/// <param name="input">String value to check</param>171
/// <returns>True if the input has all of the patterns, false otherwise.</returns>172
public static bool HasPatterns(string[] patterns, string input)173
{174
for (int i = 0; i < patterns.Length; i++)175
{176
if (Patterns.HasPattern(patterns[i], input) == false)177
return false;178
}179

180
return true;181
}182
}183


