-1

私のIDは8808135011086です。内訳は次のとおりです。

  • 880813: yy-mm-dd 形式の生年月日
  • 5011: 性別 ( 0001-4999は女性で、5000-9999は男性)
  • 0: 外国かどうか
  • 86: 残りが正当であることを確認するバリデーター番号

13 桁の数字を , , のようにグループに分ける88081350110簡単86に取得できます。

/\d{6}\d{4}\d{1}\d{2}/

\d{4}正規表現で数字を探し、それが0001-9999または5000-の間であるかどうかを確認するにはどうすればよい9999ですか? これまでのところ、次のようなコードがあります。

private
def gender_validation(gender)
  case gender
  when :male
    Employee.id_number.match(/\d{6}\d{4}\d{1}\d{2}/)
    return true
  when :famale
    Employee.id_number.match(/\d{6}\d{4}\d{1}\d{2}/)
    return true
  else
    return false
end  

マークされた性別が男性の場合、2 番目の部分 が検出され、それがと5223の間にある場合は true が返されます。50009999

私は答えを探しているだけではありません。これを行う方法も知りたいです。

4

2 に答える 2

2

男:

/\d{6}\[5-9]\d{3}\d{1}\d{2}/

女性:

/\d{6}\[0-4]\d{3}\d{1}\d{2}/
于 2013-02-20T16:06:10.007 に答える
1

Rails Guides: Active Record Validations and Callbacksで推奨されているカスタム検証に従う

私の提案する解決策は次のとおりです。

class Employee < ActiveRecord::Base
  validates_with EmployeeIdAndGenderValidator

  attr_accessible :id_number, :gender

  .
  .
  .

end

class EmployeeIdAndGenderValidator < ActiveModel::Validator

  # my id is 8808135011086 This broken down
  # {880813} is my birdthdate in the format yy-mm-dd
  # {5011} means that i am male anything 
  #     between 5000-9999 is male
  #     and 0001-4999 is female,

  # the next number {0} is weather someone is foreign or not,
  # the next two {86} is a validator number to make sure the rest is legit.

  def validate(record)
    id_number = record.id_number

    unless id_number[/\d{13}/]
      record.errors[:id_number] << "invalid id number"
    else
      brirth_date   = id_number[(0..5)]
      parsed_gender = id_number[(6..9)].to_i
      foreign       = id_number[10]
      validator     = id_number[(-2..-1)]

      validate_gender(parsed_gender, record)
    end
  end

private

  def validate_gender(parsed_gender, record)
    if(parsed_gender < 1 || parsed_gender > 9999)
      record.errors[:id_number] << "the id number had invalid gender number."
    else
      calculate_gender = (parsed_gender <= 4999 ? :female : :male)

      unless record.gender == calculate_gender
        record.errors[:gender] << "The extracted gender dont' match with the selected gender"
      end
    end
  end

end

それがあなたを助けることを願っています!

P/S: 私の英語でごめんなさい。

于 2013-02-20T17:54:00.727 に答える