質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

4263閲覧

ユーザー名を正規表現でチェックしたいのですが

vvvchrome

総合スコア19

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2016/10/30 04:14

編集2016/10/30 04:29

Rubyでユーザー名に対して正規表現によるバリデーションを行いたいのですが、
使用できるのが英数字、アンダーバー、ピリオド、ハイフンの場合、以下の正規表現は正しいでしょうか?

REGEX = /\A[a-zA-Z0-9_.-]+\z/.freeze

###追記
上記の条件にアンダーバー、ピリオド、ハイフンのみは不可、
先頭、末尾にアンダーバー、ピリオド、ハイフンは不可などの条件は付け足せるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

一つの正規表現にはできていませんが、こんな風にしてみました。
a.rb

VALID_REGEX = /\A[a-zA-Z0-9_.-]+\z/ INALID_REGEXS = [ /\A[_.-]*\z/, # アンダーバー、ピリオド、ハイフンのみは不可 /\A[_.-].*\z/, # 先頭にアンダーバー、ピリオド、ハイフンは不可 /\A.*[_.-]\z/, # 末尾にアンダーバー、ピリオド、ハイフンは不可 ] def valid?(str) return false unless str.match(VALID_REGEX) INALID_REGEXS.each do |invalid_r| return false if str.match(invalid_r) end true end TEST_CASES = [ #[ 'kato', true ], [ 'y_kato', true ], [ '_kato', false ], [ 'kato_', false ], [ '_', false ], [ '_._', false ], [ '', false ] ] TEST_CASES.each do |test| if valid?(test[0]) != test[1] p "error #{test}" end end

投稿2016/10/30 12:06

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vvvchrome

2016/10/30 13:18

回答ありがとうございます。 書き方が分かってスッキリしました。 サンプルコードを参考に実装してみます。
guest

0

ベストアンサー

以下の正規表現は正しいでしょうか?

正しいです。正規表現オブジェクトを書き換えるようなメソッドは無いと思うので、freezeは不要だと思いますが。

上記の条件にアンダーバー、ピリオド、ハイフンのみは不可、

先頭、末尾にアンダーバー、ピリオド、ハイフンは不可などの条件は付け足せるのでしょうか?

不可能では無いかもしれませんが、わかりにくくなるので、それぞれ個別にifで判断するのが良いと思います。

投稿2016/10/30 09:04

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vvvchrome

2016/10/30 09:09

解説付き回答ありがとうございます。 追記に関しての回答もありがとうございます。 freezeを削除、追加条件に関してはif等で判断しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問