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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

3693閲覧

パスワード入力における入力文字、文字数制限とvalidationチェックについて

underfield

総合スコア4

JavaScript

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/07/29 14:45

編集2020/07/30 04:31

前提・実現したいこと

Ractとreact-bootstrapを使用して、ログイン用のユーザー情報登録画面を作成しています。
画面項目の中にパスワードを入力する欄があるのですが、
このパスワードには、以下の入力条件にしたいと思っています。

 ・半角英数のみ(半角英数以外の文字は入力欄には表示しない)
・8文字以上
・登録ボタン押下で、validationチェックを行う

発生している問題

onChangeイベントで半角英数以外の文字を弾いている(入力欄には半角英数しか入っていない)のですが、
例えば「aaa+++++」と入力した場合、入力欄には「aaa」としか表示されませんが、
この状態で登録ボタンを押下するとvalidationで引っかからずに抜けてしまいます。
(+++++が文字数としてカウントされていると思われます。)

該当のソースコード

jsx

1 // コントロール定義 2 <Form id="frm_user" noValidate validated={stValidated} onSubmit={onExec}> 3 <Form.Group as={Row}> 4 <Form.Label column md="12"> 5 <u>ID</u> 6 </Form.Label> 7 <Col md="12"> 8 <Form.Control 9 id="ログインID" 10 type="text" 11 onChange={onChangeText} 12 value={LoginID || ""} 13 placeholder="半角英数のみ有効" 14 required 15 /> 16 <Form.Control.Feedback type="invalid"> 17 ログインIDを入力してください! 18 </Form.Control.Feedback> 19 </Col> 20 </Form.Group> 21 22 <Form.Group as={Row}> 23 <Form.Label column md="4"> 24 <u>パスワード</u> 25 </Form.Label> 26 <Col md="12"> 27 <Form.Control 28 id="password" 29 type="password" 30 value={PassWord || ""} 31 onChange={onChangeText} 32 placeholder="8文字以上半角英数のみ有効" 33 minLength="8" 34 required 35 /> 36 <Form.Control.Feedback type="invalid"> 37 8文字以上、半角英数で入力してください。 38 </Form.Control.Feedback> 39 </Col> 40 </Form.Group> 41 </Form> 42 43 // テキスト変更イベント 44 const onChangeText = (e) => { 45 switch (e.target.id) { 46 case "ID": 47 if (e.target.value.match(/^[A-Za-z0-9_-]*$/)) setLoginID(e.target.value); 48 break; 49 50 case "password": 51 if (e.target.value.match(/^[A-Za-z0-9_-]*$/)) setPassWord(e.target.value); 52 break; 53 54 default: 55 break; 56 } 57 };

試したこと

patternを追加してみました。
登録ボタンを押下した時点で、半角英数以外が入っていればvalidationに引っかかりますが、
半角英数以外の文字が入力できてしまいます。

jsx

1 <Form.Group as={Row}> 2 <Form.Label column md="4"> 3 <u>パスワード</u> 4 </Form.Label> 5 <Col md="12"> 6 <Form.Control 7 id="password" 8 type="password" 9 value={PassWord || ""} 10 onChange={onChangeText} 11 placeholder="8文字以上半角英数のみ有効" 12 minLength="8" 13 pattern="[a-zA-Z0-9]+" 14 required 15 /> 16 <Form.Control.Feedback type="invalid"> 17 8文字以上、半角英数で入力してください。 18 </Form.Control.Feedback> 19 </Col> 20 </Form.Group> 21 </Form> 22

補足情報(FW/ツールのバージョンなど)

react:16.12.0
react-bootstrap:1.0.1

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

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

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

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

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

miyabi_takatsuk

2020/07/29 14:57

質問タグが明らかに不足しています。 Bootstrapだけでは要は足りないです。 React、React-bootstrap、JSXの質問タブも追加してください。
guest

回答1

0

ベストアンサー

そもそも論ですが、特に入力した値の見えないパスワード欄において、入力直後の加工はすべきではありません

例えば、「英数字以外の文字を削る」処理をしたパスワードフォームに「abc!?12345」と打ち込むと、文字が削れて「abc12345」という意図しないパスワードが登録されてしまいます

いったん入力はされるがままで受け付けるのが適切です。

投稿2020/07/29 15:44

maisumakun

総合スコア146018

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

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

underfield

2020/07/30 14:31

ご回答並びにアドバイス有難うございます。 何分フロント部分の開発は初めてで、お作法的なところがわかっていませんでした。 確かにアドバイスいただいたように、入力されるがままに受け付けて、その後エラーにすると行った 処理のほうが望ましいと思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問