1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RailsでSkype名のバリデーションを書く

Last updated at Posted at 2016-08-12

はじめに

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

デモアプリ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?