简体   繁体   中英

How to implement an object in Ruby with regex

Absolute beginner in Ruby.

I need to create a class that contains the following keys:

我需要遵循的字典 API

I know that this might be the structure, but can anybody help me with syntax?

class PixKey
def cpf
    ^[0-9]{11}$
end
def cnpj
    ^[0-9]{14}$
end
def phone
    ^\+[1-9][0-9]\d{1,14}$
end
def email
    ^[a-z0-9.!#$&'*+\/=?^_`{
end
def evp
    [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
end

end

You can define regular expressions using the /.../ regular expression literal .

Since regular expressions are immutable, I would simply use constants:

class PixKey
  CPF = /^[0-9]{11}$/
  CNPJ = /^[0-9]{14}$/
  PHONE = /^\+[1-9][0-9]\d{1,14}$/
  EMAIL = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
  EVP = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
end

In the above, I've changed the email regexp to the one suggested by the HTML standard because the one in your screenshot was probably destroyed by a markdown parser.

You can use the above like this:

PixKey::CPF.match?('12345678901')        #=> true
PixKey::CNPJ.match?('12345678901234')    #=> true
PixKey::PHONE.match?('+5510998765432')   #=> true
PixKey::EMAIL.match?('pix@bcb.gov.br')   #=> true
PixKey::EVP.match?('123e4567-e89b-12d3-a456-426655440000') #=> true

Of course, you're not limited to match? , you can use any method from the Regexp class or pattern matching methods from String .

Note that in Ruby, ^ and $ match beginning and end of line which can cause problems in multi-line strings:

string = "before
+5510998765432
after"

string.match?(PixKey::PHONE) #=> true

If you want to match beginning and end of string (ie only match whole strings), you can use \A and \z instead:

PixKey::PHONE = /\A\+[1-9][0-9]\d{1,14}\z/

string = "before
+5510998765432
after"

string.match?(PixKey::PHONE) #=> false

string = '+5510998765432'

string.match?(PixKey::PHONE) #=> true

To return the regular expressions for further use, you could return the regex using / :

class PixKey
  def cpf
      /^[0-9]{11}$/
  end
end

You could run PixKey.new.cpf to return the regex:

irb(main):022:0> PixKey.new.cpf
=> /^[0-9]{11}$/

You could also make it a class method by putting self. in front of the method name or add the line class << self as the first line in your class to make them all class methods by default (don't forget the end in this case).

class PixKey
  def self.cpf
      /^[0-9]{11}$/
  end
end
class PixKey
  class << self
    def cpf
      /^[0-9]{11}$/
    end
  end
end

With this you could run PixKey.cpf to return the regex:

irb(main):022:0> PixKey.cpf
=> /^[0-9]{11}$/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM