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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183
