正規表現で英数記号を含むパスワードバリデーションの方法とは?

このQ&Aのポイント
  • Ruby on Railsでパスワードバリデーションを行う際に、正規表現を使用する方法を知りたいです。具体的には、パスワードの長さが8文字以上でかつ英数記号全てを含む必要があります。
  • パスワードのバリデーションには、正規表現を使用することができます。正規表現は、特定のパターンにマッチする文字列を抽出するために使用されます。Ruby on Railsでは、正規表現を使ってパスワードの長さと文字の組み合わせを検証することができます。
  • 正規表現を使ってパスワードのバリデーションを行う方法はいくつかありますが、以下のような正規表現を使用することで、英数字と特殊文字を含むパスワードを検証することができます。 VALID_PASSWORD_REGEX = /\A[\w\d!@#$%]+\z/ validates :password, length: { minimum: 8 }, format: { with: VALID_PASSWORD_REGEX } この正規表現は、パスワードが英数字(\w\d)と特殊文字(!@#$%)を含むことを要求しています。また、長さも8文字以上であることを検証しています。
回答を見る
  • ベストアンサー

正規表現で、英数記号を含むパスワードバリデーション

Ruby on Rails を学習中です。 パスワードは、 「長さは8文字以上で、英数記号全てを含まなければならない」 としたいと思います。 正規表現はどのように書けばよろしいでしょうか? VALID_PASSWORD_REGEX = /\A[\w]/i validates :password, length: { minimum: 8 }, format: { with: VALID_PASSWORD_REGEX } [a-zA-Z] && [\d] && [!|@|#|$|%] と書けると良いのですが、 正規表現では and 表現が難しいようなので、困っています。 助けて頂けないでしょうか? どうぞよろしくお願いいたします。

  • Ruby
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • siffon9
  • ベストアンサー率64% (136/211)
回答No.1

こんにちは > 「長さは8文字以上で、英数記号全てを含まなければならない」 Railsはわかりませんが以下の正規表現で如何でしょうか? /(?=.{8,})(?=.*\d+.*)(?=.*[a-zA-Z]+.*).*[!@#$%]+.*/ VALID_PASSWORD_REGEXに"8文字以上"の条件をいれる必要がなければ /(?=.*\d+.*)(?=.*[a-zA-Z]+.*).*[!@#$%]+.*/ "記号"の部分は使用する記号を適宜追加してみてください。

Saotome_Haruka
質問者

お礼

おはようございます。 早乙女遙佳です。 目覚めたら、ご回答があり、とっても助かります。 よく分からないところもありますので、 より深く学習して理解を深めたいと思います。 ご回答、ありがとうございました。 感謝です。

関連するQ&A

  • 正規表現で英(大小)と数字を必ず1文字ずつ含むこと

    ログイン時のパスワードのバリデーションに使う正規表現を模索しています。 言語はrubyです。 環境:ruby1.9、rails3.2、OSはWindows。 チェック内容は以下となります。  ・英字の大文字を必ず1文字は含むこと  ・英字の小文字を必ず1文字は含むこと  ・数字を必ず1文字は含むこと  ・英数文字以外は使えない(記号はすべて不可)  ・パスワードの長さは10文字以上20文字以下 自分で考えたコードは以下のようにしています(modelに記述) validates :password, :presence => true, :confirmation => true, :length => { :within => 10..20 }, :format => { :with => /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])/} 英数の大小を考慮しなくてよいのであればできそうなのですが そこが一番のネックとなりうまくいきません。 知恵をお貸し願えたらと思い質問させていただきました。 質問も初めてなので、足りない情報があれば追記いたします。 よろしくお願いいたします。

  • [ASP]正規表現で半角英数記号を判定

    [ASP]正規表現で半角英数記号を判定 ASP(VBScript+HTML)で開発作業をしています。 画面から入力された値が「半角英数」のみで構成されていることを検査する為に、 以下の入力チェックを設けています。 set objre = new RegExp objre.pattern = "[^0-9a-zA-Z]" blnCheck = objre.test(sInput) '##sInputは入力値が入った変数 このblnCheckに格納された結果がtrueかfalseかで判定しています。 しかし、半角英数のみでなく、半角記号についても入力を許可することになりました。 上記の処理を「半角英数と半角記号で構成されているかどうか」に変更する為には どのように記述を変更すればいいのでしょうか。 ご存じの方がいらっしゃいましたら助言をいただけないでしょうか。 よろしくお願いします。

  • 正規表現

    数字と大文字、小文字のアルファベットは入力OK。 記号も入力OK。でも、記号の中でも「”」、「.」は ダメ。しかも、10桁くらい入力できるようにする。 を表す正規表現は [a-zA-Z0-9&&[\"\.]]* と思ったのですが、 正しく表す正規表現はどの様なものになるのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • 英数字と記号の正規表現

    英数字と記号の文字であればtrueを返すような判定を正規表現で行いたいです。 英数字の判定([0-9a-zA-Z])、記号([\\p{Punct}]+)の判定は個別にテストして動作したのですが、二つを組み合わせて書くようにするにはどのようにすればよいのでしょうか? 当然ですが、以下のように書くと文字列の全てがそれぞれ記号なのか、英数字なのかを判定してしまうためfalseを返してしまいます。 String str = "~!@#$%^&*()_+{}|:"<>?`-=[]\;',./1234567890abcdefgxyz"; System.out.println(str.matches("[\\p{Punct}]+") || str.matches("[0-9a-zA-Z]+")); 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • 【正規表現】HTML5のpattern属性について

    HTML5のpattern属性で半角英数記号を指定するにはどう記述したら良いですか? HTMLやCSSの学習をしています。 正規表現についてはほぼ分かりません。 (1)ユーザーIDやパスワード入力フォーム半角英数記号のみの入力を処理する場合、type属性は”text”でいいのでしょうか? (2)pattern 属性に使う正規表現はほぼ理解できません。自分なりに調べてみたのですが、以下のような記述だと_アンダーバーや@マークなどの記号は識別できないのではないかと言われました。 また入力文字数制限は正規表現でも出来るようですが、以下のように自分でもわかるminlength, maxlengthで記述しようと思っていまがこれで大丈夫なのでしょうか? サンプルとして以下のように記述してみました。 type属性や、「半角英数記号」の入力文字など正しい書き方を教えてください。 よろしくお願いします。 <input type="text" name="username" pattern="^[0-9A-Za-z]+$" minlength="4" maxlength="50">

  • 正規表現

    正規表現で 数値と半角記号(!#$%()~|-^@[;],./`{+*}_)が入っているというものを表現したいのですが、、、 下記のような正規表現をすると、エラーになってしまいます。何かよい方法はありませんか? ^[a-zA-Z0-9\-_!#$%()~|-^@[;],./`{+*}_]*$ 又、携帯電話のチェックをしたいのですが、 1文字以上の文字列があってというような処理にしたいのですが、何かよい方法はないでしょうか? ereg( "@docomo\.ne\.jp$", $email )

    • ベストアンサー
    • PHP
  • JSで全角英数記号を半角英数記号に。

    JavaScriptで、全角英数記号が含まれていたら、半角英数記号に したいと思っています。 たとえば、123456→123456といった具合です。 ネットを参考にしたのですが str.replace(/[A-Za-z0-9]/g, function(s) { return String.fromCharCode(s.charCodeAt(0) - 65248); }); このロジックが近いのですが、英数字までです。 記号1つ1つ指定してreplaceではかなり手間ですよね…。 効率よく記号も半角英数にするにはどうすればよいでしょうか?

  • 正規表現でE-mailアドレス形式チェックの仕方を教えてください!

    C++でRegex::Ismatchメソッドを使いメールアドレス形式であるかのチェックをしたいのですが、 どうもうまくいきません。。 MSDNにVB用とC#用のサンプルはあったのですが、正規表現をC++用に変換できずに困っています。 ★VB Regex.IsMatch(strIn, ("^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$") ★C# Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); どなたか分かる方ご教授ください。 よろしくお願いします。

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • メールアドレスの正規表現

    メールアドレスの正規表現 正規表現の勉強をしています。下記のURLのメールアドレスの正規表現の一部が理解できません。 http://hodade.adam.ne.jp/seiki/page.php?s_mail ^[a-zA-Z0-9!$&*.=^`|~#%'+\/?_{}-]+@([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,4}$ この中の「[a-zA-Z]{2,4}$」の部分がわかりません。 行末が英文字2以上4以下というのは何を表しているのでしょうか? なぜ2以上4以下になるかが理解できません・・・ 宜しくお願いします!!

専門家に質問してみよう