matthewrudy-regexpert 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +18 -0
- data/Rakefile +23 -0
- data/lib/regexpert.rb +76 -0
- metadata +56 -0
data/README
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Regexpert
|
2
|
+
=========
|
3
|
+
|
4
|
+
Regexpert is an attempt to remove the need to worry about which regular expression to use for validating an email, a postcode, or a social security number.
|
5
|
+
Its inspired by the django.contrib.localflavor libraries and Datamapper dm-more's dm-validations module.
|
6
|
+
|
7
|
+
Example
|
8
|
+
=======
|
9
|
+
|
10
|
+
Instead of googling "email regexp", and then coming up with numerous arguments about the right regexp to use,
|
11
|
+
just use Regexpert
|
12
|
+
|
13
|
+
validates_format_of :email, :with => Regexpert::Format::EmailAddress
|
14
|
+
|
15
|
+
BOOM!!!
|
16
|
+
no work, no worries.
|
17
|
+
|
18
|
+
Copyright (c) 2008 [Matthew Rudy Jacobs], released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Test the regexpert plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.libs << 'test'
|
12
|
+
t.pattern = 'test/**/*_test.rb'
|
13
|
+
t.verbose = true
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Generate documentation for the regexpert plugin.'
|
17
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
18
|
+
rdoc.rdoc_dir = 'rdoc'
|
19
|
+
rdoc.title = 'Regexpert'
|
20
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
21
|
+
rdoc.rdoc_files.include('README')
|
22
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
23
|
+
end
|
data/lib/regexpert.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module Regexpert
|
2
|
+
module Format
|
3
|
+
# This is taken from dm-more - http://github.com/sam/dm-more/tree/master/dm-validations/lib/dm-validations/formats/email.rb
|
4
|
+
# RFC2822 (No attribution reference available)
|
5
|
+
#
|
6
|
+
# doctest: email_address
|
7
|
+
# >> "MatthewRudyJacobs@gmail.com" =~ Regexpert::Format::EmailAddress
|
8
|
+
# => 0
|
9
|
+
#
|
10
|
+
# >> "dev@" =~ Regexpert::Format::EmailAddress
|
11
|
+
# => nil
|
12
|
+
#
|
13
|
+
EmailAddress = begin
|
14
|
+
alpha = "a-zA-Z"
|
15
|
+
digit = "0-9"
|
16
|
+
atext = "[#{alpha}#{digit}\!\#\$\%\&\'\*+\/\=\?\^\_\`\{\|\}\~\-]"
|
17
|
+
dot_atom_text = "#{atext}+([.]#{atext}*)*"
|
18
|
+
dot_atom = "#{dot_atom_text}"
|
19
|
+
qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
|
20
|
+
text = "[\\x01-\\x09\\x11\\x12\\x14-\\x7f]"
|
21
|
+
quoted_pair = "(\\x5c#{text})"
|
22
|
+
qcontent = "(?:#{qtext}|#{quoted_pair})"
|
23
|
+
quoted_string = "[\"]#{qcontent}+[\"]"
|
24
|
+
atom = "#{atext}+"
|
25
|
+
word = "(?:#{atom}|#{quoted_string})"
|
26
|
+
obs_local_part = "#{word}([.]#{word})*"
|
27
|
+
local_part = "(?:#{dot_atom}|#{quoted_string}|#{obs_local_part})"
|
28
|
+
no_ws_ctl = "\\x01-\\x08\\x11\\x12\\x14-\\x1f\\x7f"
|
29
|
+
dtext = "[#{no_ws_ctl}\\x21-\\x5a\\x5e-\\x7e]"
|
30
|
+
dcontent = "(?:#{dtext}|#{quoted_pair})"
|
31
|
+
domain_literal = "\\[#{dcontent}+\\]"
|
32
|
+
obs_domain = "#{atom}([.]#{atom})*"
|
33
|
+
domain = "(?:#{dot_atom}|#{domain_literal}|#{obs_domain})"
|
34
|
+
addr_spec = "#{local_part}\@#{domain}"
|
35
|
+
pattern = /^#{addr_spec}$/
|
36
|
+
end
|
37
|
+
|
38
|
+
# This is taken from dm-more http://github.com/sam/dm-more/tree/master/dm-validations/lib/dm-validations/formats/url.rb
|
39
|
+
# Regex from http://www.igvita.com/2006/09/07/validating-url-in-ruby-on-rails/
|
40
|
+
#
|
41
|
+
# doctest: url # examples from Rails auto_link tests
|
42
|
+
# >> "http://www.rubyonrails.com/contact;new" =~ Regexpert::Format::Url
|
43
|
+
# => 0
|
44
|
+
# >> "http://maps.google.co.uk/maps?f=q&q=the+london+eye&ie=UTF8&ll=51.503373,-0.11939&spn=0.007052,0.012767&z=16&iwloc=A" =~ Regexpert::Format::Url
|
45
|
+
# => 0
|
46
|
+
# >> "http://en.wikipedia.org/wiki/Sprite_(computer_graphics)" =~ Regexpert::Format::Url
|
47
|
+
# => 0
|
48
|
+
# TODO: think of a good example of a bad url
|
49
|
+
Url = begin
|
50
|
+
/(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix
|
51
|
+
end
|
52
|
+
|
53
|
+
# This is taken from Django.Contrib.Localflavor.uk
|
54
|
+
# The regular expression used is sourced from the schema for British Standard
|
55
|
+
# BS7666 address types: http://www.govtalk.gov.uk/gdsc/schemas/bs7666-v2-0.xsd
|
56
|
+
#
|
57
|
+
# doctest: ukpostcode
|
58
|
+
# >> "GIR 0AA" =~ Regexpert::Format::UKPostcode # GIR 0AA is a special GIRO postcode
|
59
|
+
# => 0
|
60
|
+
# >> "AL40XB" =~ Regexpert::Format::UKPostcode
|
61
|
+
# => 0
|
62
|
+
# >> "CB4 1TL" =~ Regexpert::Format::UKPostcode
|
63
|
+
# => 0
|
64
|
+
#
|
65
|
+
# >> "AL44 NOP" =~ Regexpert::Format::UKPostcode
|
66
|
+
# => nil
|
67
|
+
# >> "CB4-1TL" =~ Regexpert::Format::UKPostcode
|
68
|
+
# => nil
|
69
|
+
#
|
70
|
+
UKPostcode = begin
|
71
|
+
outcode_pattern = '[A-PR-UWYZ]([0-9]{1,2}|([A-HIK-Y][0-9](|[0-9]|[ABEHMNPRVWXY]))|[0-9][A-HJKSTUW])'
|
72
|
+
incode_pattern = '[0-9][ABD-HJLNP-UW-Z]{2}'
|
73
|
+
postcode_regex = Regexp.new("^(GIR *0AA|#{outcode_pattern} *#{incode_pattern})$", Regexp::IGNORECASE)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: matthewrudy-regexpert
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matthew Rudy Jacobs
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-12-07 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Regular expressions bundled into a single place, so you dont have to think anymore about what email regexp to use.
|
17
|
+
email: MatthewRudyJacobs@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
files:
|
25
|
+
- README
|
26
|
+
- Rakefile
|
27
|
+
- lib/regexpert.rb
|
28
|
+
has_rdoc: true
|
29
|
+
homepage: http://github.com/matthewrudy/regexpert
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options:
|
32
|
+
- --main
|
33
|
+
- README
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: "0"
|
41
|
+
version:
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
version:
|
48
|
+
requirements: []
|
49
|
+
|
50
|
+
rubyforge_project:
|
51
|
+
rubygems_version: 1.2.0
|
52
|
+
signing_key:
|
53
|
+
specification_version: 2
|
54
|
+
summary: A bunch of useful Regular expressions
|
55
|
+
test_files: []
|
56
|
+
|