はじめに
Railsで作成したウェブアプリケーションでSkype名(skype_name)を持つUserモデルがあったとした場合、
Skype名が適切な形式かを判定するバリデーションの書き方を紹介する。
Skype名に使える文字列
Skypeアカウントは以下のurlから作成できる。
https://login.skype.com/registration
公式に書かれているSkype Nameで使える文字列は以下の通り
What is my skype name? your skype name is your unique username for Skype. It must be between 6-32 characters,start with a letter and contain ony letters and numbers(no spaces or special character)
- ユニークであること
- 文字数は6〜32であること
- 文字列から始まること
- 文字列と数値で構成されること
- 空白不可・特殊記号不可
使える特殊記号に注意
特殊記号不可とあるが、調べたところ「,.-」は利用できる
またSkypeはFacebookアカウントやMicrosoftアカウントで登録した場合は、
Skype名は以下の通り「:」が含まれるのでバリデーションルールに考慮する
- Facebook facebook:lee
- Microsoft live:clementine
バリデーションを定義する
上記の条件を満たしたvalidationをUser modelに定義する。
class User < ActiveRecord::Base
validates :skype_name,
length: {
in: 6..32,
},
format: {
with: /\A[a-zA-Z\d][\w,.-]+\z/,
message: "は正しいSkype名形式で入力して下さい"
}
end
modelのspecは以下
require 'rails_helper'
RSpec.describe User, type: :model do
describe "validates" do
describe "skype_name" do
context "with valid text" do
subject{ User.new(skype_name: "live:umeyuki_,.-") }
it { is_expected.to be_valid}
end
context "with less than 6 characters" do
subject{ User.new(skype_name: "umeo") }
it { is_expected.not_to be_valid}
end
context "with less than 32 characters" do
subject{ User.new(skype_name: "ume" * 11 ) }
it { is_expected.not_to be_valid }
end
context "with email format" do
subject{ User.new(skype_name: "umeyuki1111@gmail.com" ) }
it { is_expected.not_to be_valid }
end
context "with space" do
subject{ User.new(skype_name: "ume yuki" ) }
it { is_expected.not_to be_valid }
end
context "with a double byte character" do
subject{ User.new(skype_name: "梅雪" ) }
it { is_expected.not_to be_valid }
end
context "start with a sign" do
subject{ User.new(skype_name: ".umeyuki" ) }
it { is_expected.not_to be_valid }
end
end
end
end
デモアプリ