Help us understand the problem. What is going on with this article?

[Ruby] メールアドレスの@の手前の部分を取得したい

example@gmail.com

上記のメールアドレスが与えられた時に、"example"を返したい。

修正版実装

'example-1..@gmail.com'.slice(/([\w\-.]+)@/, 1) # 1 番目の括弧にマッチする文字列を取得する。
#=> "example-1.."

'example-1..@gmail.com'[/([\w\-.]+)@/, 1] # とも書ける。
#=> "example-1.."

def gen_name_from_email(email)
    return email[/([\w\-.]+)@/, 1] || SecureRandom.alphanumeric(10)
end

コメ欄記載感謝!

実装

 def gen_name_from_email(email)
     email =~ /([\w\-.]+)@/
     $1 || SecureRandom.alphanumeric(10) # 念の為、nil対策
 end

email = "example-1..@gmail.com" # => example-1..
email = "example-1.." # => nil

=~ (String)
=~でマッチに成功したときは、組み込み変数$&、$1、$2などに値がセットされます。

他にも標準クラスmatchやRegexpクラスのmatchがある模様

メールアドレスで使える文字

  • 半角英小文字、数字、「-」(ハイフン)、「.」( ドット)、「_」(アンダーバー)のみ 考慮する
  • 文字数は、3文字以上30文字以内 考慮しない
  • ひとつ目の文字は、アルファベットまたは数字のみ 考慮しない

正規表現

/w : アルファベット、数字、アンスコ
+ : 直前の文字1回以上の繰り返し

Rubocopのエラー

Rubocop の構文チェックで "Avoid the use of Perl-style backrefs." と警告が表示される

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away