ruby_regex 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +1 -0
- data/lib/ruby_regex.rb +4 -25
- data/test/fixtures/emails.yml +39 -0
- data/test/ruby_regex_test.rb +48 -135
- metadata +12 -4
data/README.rdoc
CHANGED
data/lib/ruby_regex.rb
CHANGED
@@ -45,29 +45,8 @@ module RubyRegex
|
|
45
45
|
# Del.icio.us username
|
46
46
|
DeliciousUsername = /^([a-z0-9\_\-])+$/ix
|
47
47
|
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
|
52
|
-
#
|
53
|
-
# Translated to Ruby by Tim Fletcher, with changes suggested by Dan Kubb.
|
54
|
-
#
|
55
|
-
# Licensed under a Creative Commons Attribution-ShareAlike 2.5 License
|
56
|
-
# http://creativecommons.org/licenses/by-sa/2.5/
|
57
|
-
Email = begin
|
58
|
-
qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
|
59
|
-
dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'
|
60
|
-
atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-' +
|
61
|
-
'\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'
|
62
|
-
quoted_pair = '\\x5c[\\x00-\\x7f]'
|
63
|
-
domain_literal = "\\x5b(?:#{dtext}|#{quoted_pair})*\\x5d"
|
64
|
-
quoted_string = "\\x22(?:#{qtext}|#{quoted_pair})*\\x22"
|
65
|
-
domain_ref = atom
|
66
|
-
sub_domain = "(?:#{domain_ref}|#{domain_literal})"
|
67
|
-
word = "(?:#{atom}|#{quoted_string})"
|
68
|
-
domain = "#{sub_domain}(?:\\x2e#{sub_domain})*"
|
69
|
-
local_part = "#{word}(?:\\x2e#{word})*"
|
70
|
-
addr_spec = "#{local_part}\\x40#{domain}"
|
71
|
-
pattern = /\A#{addr_spec}\z/
|
72
|
-
end
|
48
|
+
# Email
|
49
|
+
# From the email regex research: http://fightingforalostcause.net/misc/2006/compare-email-regex.php
|
50
|
+
# Authors: James Watts and Francisco Jose Martin Moreno
|
51
|
+
Email = /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i
|
73
52
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
valid:
|
2
|
+
- "l3tt3rsAndNumb3rs@domain.com"
|
3
|
+
- "has-dash@domain.com"
|
4
|
+
- "hasApostrophe.o'leary@domain.org"
|
5
|
+
- "uncommonTLD@domain.museum"
|
6
|
+
- "uncommonTLD@domain.travel"
|
7
|
+
- "uncommonTLD@domain.mobi"
|
8
|
+
- "countryCodeTLD@domain.uk"
|
9
|
+
- "countryCodeTLD@domain.rw"
|
10
|
+
- "lettersInDomain@911.com"
|
11
|
+
- "underscore_inLocal@domain.net"
|
12
|
+
- "subdomain@sub.domain.com"
|
13
|
+
- "local@dash-inDomain.com"
|
14
|
+
- "dot.inLocal@foo.com"
|
15
|
+
- "a@singleLetterLocal.org"
|
16
|
+
- "singleLetterDomain@x.org"
|
17
|
+
- "&*=?^+{}'~@validCharsInLocal.net"
|
18
|
+
- "foor@bar.newTLD"
|
19
|
+
|
20
|
+
|
21
|
+
invalid:
|
22
|
+
- "@missingLocal.org"
|
23
|
+
- "someone-else@127.0.0.1.26"
|
24
|
+
- "missingdomain@.com"
|
25
|
+
- "missingatSign.net"
|
26
|
+
- "missingDot@com"
|
27
|
+
- "two@@signs.com"
|
28
|
+
- "colonButNoPort@127.0.0.1:"
|
29
|
+
- ""
|
30
|
+
- ".localStartsWithDot@domain.com"
|
31
|
+
- "localEndsWithDot.@domain.com"
|
32
|
+
- "two..consecutiveDots@domain.com"
|
33
|
+
- "domainStartsWithDash@-domain.com"
|
34
|
+
- "domainEndsWithDash@domain-.com"
|
35
|
+
- "numbersInTLD@domain.c0m"
|
36
|
+
- "missingTLD@domain."
|
37
|
+
- "! #$%(),/;<>[]`|@invalidCharsInLocal.org"
|
38
|
+
- "invalidCharsInDomain@! #$%(),/;<>_[]`|.org"
|
39
|
+
- "local@SecondLevelDomainNamesAreInvalidIfTheyAreLongerThan64Charactersss.org"
|
data/test/ruby_regex_test.rb
CHANGED
@@ -2,230 +2,143 @@ require 'test/unit'
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'active_support'
|
4
4
|
require 'active_support/test_case'
|
5
|
-
require 'ruby_regex'
|
5
|
+
require File.join( File.dirname(__FILE__), '../lib/ruby_regex' )
|
6
6
|
|
7
|
-
class RubyRegexTest < ActiveSupport::TestCase
|
7
|
+
class RubyRegexTest < ActiveSupport::TestCase
|
8
|
+
|
8
9
|
#Username
|
9
10
|
def test_valid_usernames
|
10
|
-
|
11
|
-
usernames.each do |username|
|
12
|
-
message = build_message(message, '<?> do not pass the test', username)
|
13
|
-
assert(username =~ RubyRegex::Username, username)
|
14
|
-
end
|
11
|
+
check_valid_regex RubyRegex::Username, ['test', 'test_test', 'test1', 'test_1']
|
15
12
|
end
|
16
13
|
|
17
14
|
def test_invalid_usernames
|
18
|
-
|
19
|
-
usernames.each do |username|
|
20
|
-
message = build_message(message, '<?> do not pass the test', username)
|
21
|
-
assert(username !~ RubyRegex::Username, username)
|
22
|
-
end
|
15
|
+
check_invalid_regex RubyRegex::Username, ['test-test', 'test.test', 'test/test', 'test@test']
|
23
16
|
end
|
24
17
|
|
25
18
|
# DNI
|
26
19
|
def test_valid_dnis
|
27
|
-
|
28
|
-
dnis.each do |dni|
|
29
|
-
message = build_message(message, '<?> do not pass the test', dni)
|
30
|
-
assert(dni =~ RubyRegex::Username, dni)
|
31
|
-
end
|
20
|
+
check_valid_regex RubyRegex::Dni, ['40990889J', '99888777h']
|
32
21
|
end
|
33
22
|
|
34
23
|
def test_invalid_dnis
|
35
|
-
|
36
|
-
dnis.each do |dni|
|
37
|
-
message = build_message(message, '<?> do not pass the test', dni)
|
38
|
-
assert(dni !~ RubyRegex::Username, dni)
|
39
|
-
end
|
24
|
+
check_invalid_regex RubyRegex::Dni, ['90.900.900V', '90900900-V']
|
40
25
|
end
|
41
26
|
|
42
27
|
# Email
|
43
28
|
def test_valid_emails
|
44
|
-
|
45
|
-
emails.each do |email|
|
46
|
-
message = build_message(message, '<?> do not pass the test', email)
|
47
|
-
assert(email =~ RubyRegex::Email, email)
|
48
|
-
end
|
29
|
+
check_valid_regex RubyRegex::Email, load_fixture('emails')['valid']
|
49
30
|
end
|
50
31
|
|
51
|
-
#TODO: 'test@test' is a valid domain, fix!!!
|
52
32
|
def test_invalid_emails
|
53
|
-
|
54
|
-
emails.each do |email|
|
55
|
-
message = build_message(message, '<?> do not pass the test', email)
|
56
|
-
assert(email !~ RubyRegex::Email, message)
|
57
|
-
end
|
33
|
+
check_invalid_regex RubyRegex::Email, load_fixture('emails')["invalid"]
|
58
34
|
end
|
59
35
|
|
60
36
|
# Domains
|
61
37
|
def test_valid_domains
|
62
|
-
|
63
|
-
domains.each do |domain|
|
64
|
-
message = build_message(message, '<?> do not pass the test', domain)
|
65
|
-
assert(domain =~ RubyRegex::Domain, message)
|
66
|
-
end
|
38
|
+
check_valid_regex RubyRegex::Domain, ['test.com', 'www.test.com', 'test.es', 'www.test.es', 'test.co.uk', 'www.test.co.uk', 'test.info', 'www.test.info', 'test.com.es', 'www.test.com.es', 'test-test.com']
|
67
39
|
end
|
68
40
|
|
69
41
|
def test_invalid_domains
|
70
|
-
|
71
|
-
domains.each do |domain|
|
72
|
-
message = build_message(message, '<?> do not pass the test', domain)
|
73
|
-
assert(domain !~ RubyRegex::Domain, message)
|
74
|
-
end
|
42
|
+
check_invalid_regex RubyRegex::Domain, ['test.', 'www.test.e', 'www.test.', 'test.e', '!test.com', 'test/test.com', 'test_test.com']
|
75
43
|
end
|
76
44
|
|
77
45
|
# Url
|
78
46
|
def test_valid_url
|
79
|
-
|
80
|
-
'https://test.co.uk', 'http://www.test.co.uk/index.html?id=34&name=username']
|
81
|
-
urls.each do |url|
|
82
|
-
message = build_message('<?> do not pass the test', url)
|
83
|
-
assert(url =~ RubyRegex::URL, message)
|
84
|
-
end
|
47
|
+
check_valid_regex RubyRegex::URL, ['http://test.com', 'http://www.test.com', 'http://test.es/index', 'http://www.test.es/index.html', 'https://test.co.uk', 'http://www.test.co.uk/index.html?id=34&name=username']
|
85
48
|
end
|
86
49
|
|
87
50
|
def test_invalid_url
|
88
|
-
|
89
|
-
urls.each do |url|
|
90
|
-
message = build_message(message, '<?> do not pass the test', url)
|
91
|
-
assert(url !~ RubyRegex::URL, message)
|
92
|
-
end
|
51
|
+
check_invalid_regex RubyRegex::URL, ['test.com', 'www.test.com', 'http://test.es-index', 'http://www.test.es?index.html']
|
93
52
|
end
|
94
53
|
|
95
54
|
# CreditCard
|
96
55
|
def test_valid_credit_cards
|
97
|
-
|
98
|
-
credit_cards.each do |credit_card|
|
99
|
-
message = build_message(message, '<?> do not pass the test', credit_card)
|
100
|
-
assert(credit_card =~ RubyRegex::CreditCard, message)
|
101
|
-
end
|
56
|
+
check_valid_regex RubyRegex::CreditCard, [ '1234123412341234', '1234 1234 1234 1234', '1234-1234-1234-1234']
|
102
57
|
end
|
103
58
|
|
104
59
|
def test_invalid_credit_cards
|
105
|
-
|
106
|
-
'1234 1234 1234 1234', '1234-1234 12341234', '123a-1234-1234-1234']
|
107
|
-
credit_cards.each do |credit_card|
|
108
|
-
message = build_message(message, '<?> do not pass the test', credit_card)
|
109
|
-
assert(credit_card !~ RubyRegex::Domain, message)
|
110
|
-
end
|
60
|
+
check_invalid_regex RubyRegex::CreditCard, ['1234_1234_1234_1234', '1234', '12341234', '123412341234', '1234 1234 1234 1234', '1234-1234 12341234', '123a-1234-1234-1234']
|
111
61
|
end
|
112
62
|
|
113
63
|
# US Social Security
|
114
64
|
def test_valid_usss_numbers
|
115
|
-
|
116
|
-
usss_numbers.each do |usss_number|
|
117
|
-
message = build_message(message, '<?> do not pass the test', usss_number)
|
118
|
-
assert(usss_number =~ RubyRegex::USSocialSecurity, message)
|
119
|
-
end
|
65
|
+
check_valid_regex RubyRegex::USSocialSecurity, ['123-12-1234']
|
120
66
|
end
|
121
67
|
|
122
68
|
def test_invalid_usss_numbers
|
123
|
-
|
124
|
-
usss_numbers.each do |usss_number|
|
125
|
-
message = build_message(message, '<?> do not pass the test', usss_number)
|
126
|
-
assert(usss_number !~ RubyRegex::USSocialSecurity, message)
|
127
|
-
end
|
69
|
+
check_invalid_regex RubyRegex::USSocialSecurity, [ '1234_1234_1234_1234', '1234', '123121234', '123_12_1234', '123 12 1234']
|
128
70
|
end
|
129
71
|
|
130
72
|
# General Postal Code
|
131
73
|
def test_valid_postal_codes
|
132
|
-
|
133
|
-
postal_codes.each do |postal_code|
|
134
|
-
message = build_message(message, '<?> do not pass the test', postal_code)
|
135
|
-
assert(postal_code =~ RubyRegex::GeneralPostalCode, message)
|
136
|
-
end
|
74
|
+
check_valid_regex RubyRegex::GeneralPostalCode, ['12345']
|
137
75
|
end
|
138
76
|
|
139
77
|
def test_invalid_postal_codes
|
140
|
-
|
141
|
-
postal_codes.each do |postal_code|
|
142
|
-
message = build_message(message, '<?> do not pass the test', postal_code)
|
143
|
-
assert(postal_code !~ RubyRegex::GeneralPostalCode, message)
|
144
|
-
end
|
78
|
+
check_invalid_regex RubyRegex::GeneralPostalCode, [ '1', '12', '123', '1234', '123456']
|
145
79
|
end
|
146
80
|
|
147
81
|
# ZIP Code
|
148
82
|
def test_valid_zip_codes
|
149
|
-
|
150
|
-
zip_codes.each do |zip_code|
|
151
|
-
message = build_message(message, '<?> do not pass the test', zip_code)
|
152
|
-
assert(zip_code =~ RubyRegex::ZIPCode, message)
|
153
|
-
end
|
83
|
+
check_valid_regex RubyRegex::ZIPCode, [ '12345', '12345-1234']
|
154
84
|
end
|
155
85
|
|
156
86
|
def test_invalid_zip_codes
|
157
|
-
|
158
|
-
zip_codes.each do |zip_code|
|
159
|
-
message = build_message(message, '<?> do not pass the test', zip_code)
|
160
|
-
assert(zip_code !~ RubyRegex::ZIPCode, message)
|
161
|
-
end
|
87
|
+
check_invalid_regex RubyRegex::ZIPCode, [ '1', '12', '123', '1234', '123456', '12345_1234', '12345 1234', '1234-1234']
|
162
88
|
end
|
163
89
|
|
164
90
|
# Twitter usernames
|
165
91
|
def test_valid_twitter_usernames
|
166
|
-
|
167
|
-
twitter_usernames.each do |twitter_username|
|
168
|
-
message = build_message(message, '<?> does not pass the test', twitter_username)
|
169
|
-
assert(twitter_username =~ RubyRegex::TwitterUsername, message)
|
170
|
-
end
|
92
|
+
check_valid_regex RubyRegex::TwitterUsername, ['ji', 'nickel84', 'sepa_rate']
|
171
93
|
end
|
172
94
|
|
173
95
|
def test_invalid_twitter_usernames
|
174
|
-
|
175
|
-
twitter_usernames.each do |twitter_username|
|
176
|
-
message = build_message(message, '<?> does not pass the test', twitter_username)
|
177
|
-
assert(twitter_username !~ RubyRegex::TwitterUsername, message)
|
178
|
-
end
|
96
|
+
check_invalid_regex RubyRegex::TwitterUsername, ['nickel 83', 'h.ppywebcoder']
|
179
97
|
end
|
180
98
|
|
181
99
|
# Github usernames
|
182
100
|
def test_valid_github_usernames
|
183
|
-
|
184
|
-
github_usernames.each do |github_username|
|
185
|
-
message = build_message(message, '<?> does not pass the test', github_username)
|
186
|
-
assert(github_username =~ RubyRegex::GithubUsername, message)
|
187
|
-
end
|
101
|
+
check_valid_regex RubyRegex::GithubUsername, ['ji', 'nickel84', 'sepa_rate', 'ernesto-jimenez']
|
188
102
|
end
|
189
103
|
|
190
104
|
def test_invalid_github_usernames
|
191
|
-
|
192
|
-
github_usernames.each do |github_username|
|
193
|
-
message = build_message(message, '<?> does not pass the test', github_username)
|
194
|
-
assert(github_username !~ RubyRegex::GithubUsername, message)
|
195
|
-
end
|
105
|
+
check_invalid_regex RubyRegex::GithubUsername, ['nickel 84', 'h.ppywebcoder']
|
196
106
|
end
|
197
107
|
|
198
108
|
# Slideshare usernames
|
199
109
|
def test_valid_slideshare_usernames
|
200
|
-
|
201
|
-
slideshare_usernames.each do |slideshare_username|
|
202
|
-
message = build_message(message, '<?> does not pass the test', slideshare_username)
|
203
|
-
assert(slideshare_username =~ RubyRegex::SlideshareUsername, message)
|
204
|
-
end
|
110
|
+
check_valid_regex RubyRegex::SlideshareUsername, ['ji', 'nickel84']
|
205
111
|
end
|
206
112
|
|
207
113
|
def test_invalid_slideshare_usernames
|
208
|
-
|
209
|
-
slideshare_usernames.each do |slideshare_username|
|
210
|
-
message = build_message(message, '<?> does not pass the test', slideshare_username)
|
211
|
-
assert(slideshare_username !~ RubyRegex::SlideshareUsername, message)
|
212
|
-
end
|
114
|
+
check_invalid_regex RubyRegex::SlideshareUsername, ['nickel 84', 'h.ppywebcoder', 'sepa_rate', 'ernesto-jimenez']
|
213
115
|
end
|
214
116
|
|
215
117
|
# Del.icio.us usernames
|
216
118
|
def test_valid_delicious_usernames
|
217
|
-
|
218
|
-
delicious_usernames.each do |delicious_username|
|
219
|
-
message = build_message(message, '<?> does not pass the test', delicious_username)
|
220
|
-
assert(delicious_username =~ RubyRegex::DeliciousUsername, message)
|
221
|
-
end
|
119
|
+
check_valid_regex RubyRegex::DeliciousUsername, ['ji', 'nickel84', 'sepa_rate', 'ernesto-jimenez']
|
222
120
|
end
|
223
121
|
|
224
122
|
def test_invalid_delicious_usernames
|
225
|
-
|
226
|
-
delicious_usernames.each do |delicious_username|
|
227
|
-
message = build_message(message, '<?> does not pass the test', delicious_username)
|
228
|
-
assert(delicious_username !~ RubyRegex::DeliciousUsername, message)
|
229
|
-
end
|
123
|
+
check_invalid_regex RubyRegex::DeliciousUsername, ['nickel 84', 'h.ppywebcoder']
|
230
124
|
end
|
125
|
+
|
126
|
+
private
|
127
|
+
def load_fixture( name )
|
128
|
+
YAML.load( File.read( File.join( File.dirname(__FILE__), 'fixtures', "#{name}.yml" ) ) )
|
129
|
+
end
|
130
|
+
|
131
|
+
def check_valid_regex(regexp, strings)
|
132
|
+
strings.each do |str|
|
133
|
+
message = build_message(message, '<?> does not pass the test', str)
|
134
|
+
assert(str =~ regexp, message)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def check_invalid_regex(regexp, strings)
|
139
|
+
strings.each do |str|
|
140
|
+
message = build_message(message, '<?> does not pass the test', str)
|
141
|
+
assert(str !~ regexp, message)
|
142
|
+
end
|
143
|
+
end
|
231
144
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_regex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Emili Parreno
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-08-26 00:00:00 +02:00
|
18
19
|
default_executable:
|
19
20
|
dependencies: []
|
20
21
|
|
@@ -31,6 +32,8 @@ files:
|
|
31
32
|
- README.rdoc
|
32
33
|
- LICENSE
|
33
34
|
- lib/ruby_regex.rb
|
35
|
+
- test/ruby_regex_test.rb
|
36
|
+
- test/fixtures/emails.yml
|
34
37
|
has_rdoc: true
|
35
38
|
homepage: http://github.com/eparreno/ruby_regex
|
36
39
|
licenses: []
|
@@ -42,25 +45,30 @@ rdoc_options:
|
|
42
45
|
require_paths:
|
43
46
|
- lib
|
44
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
45
49
|
requirements:
|
46
50
|
- - ">="
|
47
51
|
- !ruby/object:Gem::Version
|
52
|
+
hash: 3
|
48
53
|
segments:
|
49
54
|
- 0
|
50
55
|
version: "0"
|
51
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
52
58
|
requirements:
|
53
59
|
- - ">="
|
54
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
55
62
|
segments:
|
56
63
|
- 0
|
57
64
|
version: "0"
|
58
65
|
requirements: []
|
59
66
|
|
60
67
|
rubyforge_project:
|
61
|
-
rubygems_version: 1.3.
|
68
|
+
rubygems_version: 1.3.7
|
62
69
|
signing_key:
|
63
70
|
specification_version: 3
|
64
71
|
summary: none
|
65
72
|
test_files:
|
66
73
|
- test/ruby_regex_test.rb
|
74
|
+
- test/fixtures/emails.yml
|