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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

43393閲覧

半角英数字と記号入力を制限する正規表現式

lovelydai

総合スコア38

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/09/26 06:28

こんにちは、簡単なログインシステムを作っています。
やりたいのは以下に示したパスワードポリシーに基づき、パスワードチェックを行うことです。

  • 桁数チェック: 6文字以上 32文字以下
  • 文字チェック:英字のみ、数字のみでも可
  • 記号の使用自体は可とし、使える文字種は、!@#$%^&*()_+-=[]{};:?,. 

Cakephp3の認証を使ってログイン機能を実装しましたが、Cakephp3のValidationを使うとハッシュ化されたパスワードがValidationされてしまい、32文字を超え、正常に動きませんでした。(他のフィールドは上手くチェックされています。)

php

1 2// UsersTabel.phpの一部 3 4 public function validationDefault(Validator $validator) 5 { 6 $validator 7 ->scalar('password') 8 ->notEmpty('password',__('パスワードを入力してください。')); 9 ->lengthBetween('password', [6, 32], __('最小6~最大32桁数で入力してください。')); 10 ->add('password', 'alphaNumeric', [ 11 'rule' => ['custom','/^(?=.*[0-9])(?=.*[A-Za-z])(?=.*[!@#$%^[\]\&*()+-={};:?,._]$/i'], 12 'message' => '半角英数字のみで入力してください。' 13 ]); 14  }

そこで、パスワードのみBootstrapのValidatorを使うという方法で試してみましたが、やはり正常に動きませんでした。正規表現式を消すと動きますが、正規表現式を入れるとSubmitボタンが押せなくなります。

Javascript

1 2//Add.ctpなどのビューファイルの一部(BootstrapValidator.jsと.cssはCDNでリンク。) 3 4<script type="text/javascript"> 5 $(function() { 6 $('form').bootstrapValidator({ 7 live: 'enabled', 8 feedbackIcons: { 9 valid: 'glyphicon glyphicon-ok', 10 invalid: 'glyphicon glyphicon-remove', 11 validating: 'glyphicon glyphicon-refresh' 12 }, 13 fields: { 14 password: { 15 validators: { 16 notEmpty: { message: 'パスワードは必須項目です' }, 17 stringLength: { message: '6~32文字以内で入力してください', min: 6, max: 32 }, 18 regexp: { message: '半角英数字と記号を入力してください', regexp: /^[a-zA-Z0-9!@#$%^&*()_+-=[]{};:?,.]+$/ } 19 } 20 } 21 } 22 }); 23 }); 24</script> 25

質問は、2つです。

0.Cakephp3のValidationを使い、上記のパスワードポリシーに基づき、Validationできる方法はありませんか?例えば、モデル(UsersTabel.php)ではなくてコントローラー(UsersController.php)でValidationをするとハッシュ化される前にできそうですが…公式サイトを色々みた結果、モデルのないフォームというものが気になりますがあまり理解できませんでした。
0. 半額英数字と記号「!@#$%^&*()_+-=[]{};:?,.」のみ入力制限する正規表現式の正しい書き方を教えていただけますでしょうか。自分が書いたものは以下のようです。

Javascript

1/^[a-zA-Z0-9!@#$%^&*()_+-=[]{};:?,.]+$/

どうそよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

手を抜きたいならpreg_quoteをご利用ください

PHP

1$str="!@#$%^&*()_+-=[]{};:?,."; 2$str=preg_quote($str,"/"); /*特別にエスケープしたい文字は追加できる*/ 3$pattern="/".$str."/";

投稿2017/09/26 08:09

yambejp

総合スコア116443

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

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

lovelydai

2017/09/26 08:59

本当にありがとうございます!
guest

0

ベストアンサー

半額英数字と記号「!@#$%^&*()_+-=[]{};:?,.」のみ

文字クラスの中では"-"は範囲を示します。ただし、文字クラスの先頭か末尾にあれば"-"とマッチします。
また、"]"をエスケープしないと文字クラスの終了とみなされます。念のため"["もエスケープしておきましょうか。
したがって、次のようになります。

/^[a-zA-Z0-9!#$%&()*+,.:;=?@[]^_{}-]+$/

投稿2017/09/26 06:58

x_x

総合スコア13749

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

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

lovelydai

2017/09/26 08:59

本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問