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

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

新規登録して質問してみよう
ただいま回答率
85.46%
バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

3回答

956閲覧

共通するバリデーションを簡潔に書きたい

TofuLove

総合スコア14

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/05/14 00:22

編集2021/05/14 00:30

前提・実現したいこと

ユーザー情報の作成関数とユーザー情報の更新関数があります。

javascirpt

1const createUser = () => { 2 const name = getInputNameValue() 3 if(!name) return alert("名前を入力してください。") 4 const description = getInputDesValue() 5 if(!description) return alert("説明を入力してください。") 6 const newUser = {name: name, des: description} 7 // 以下ユーザー情報作成 8} 9 10const updateUser = () => { 11 const name = getInputNameValue() 12 if(!name) return alert("名前を入力してください。") 13 const description = getInputDesValue() 14 if(!description) return alert("説明を入力してください。") 15 const updateUser = {name: name, des: description} 16 // 以下ユーザー情報更新 17}

どちらの関数も冒頭が同じなので、簡素化したいです。

試したこと・発生している問題

下記のようにバリデーションを関数化しました。

javascirpt

1const validation = () => { 2 const name = getInputNameValue() 3 if(!name) return alert("名前を入力してください。") 4 const description = getInputDesValue() 5 if(!description) return alert("説明を入力してください。") 6 return {name: name, des: description} 7} 8 9const createUser = async () => { 10 const response = await validation(); 11 // 以下ユーザー情報作成 12} 13 14const updateUser = async () => { 15 const = response = validation(); 16 // 以下ユーザー情報更新 17}

上記のコードだと、バリデーションに引っかかりalertが実行されても、validation関数の実行が中止されるだけで、作成または更新が行なわれるかと思います。


そこで、validation関数の返り値を元にalertを出すよう、下記のように変更しました。

javascript

1const validation = () => { 2 const name = getInputNameValue() 3 if(!name) return "noName" 4 const description = getInputDesValue() 5 if(!description) return "noDes" 6 return {name: name, des: description} 7} 8 9const createUser = async () => { 10 const response = await validation() 11 if(response === "noName") { 12 return alert("名前を入力してください。") 13 } else if(response === "noDes") { 14 return alert("説明を入力してください。") 15 } 16 const newUser = response 17 // 以下ユーザー情報作成 18} 19 20const updateUser = async () => { 21 const response = await validation() 22 if(response === "noName") { 23 return alert("名前を入力してください。") 24 } else if(response === "noDes") { 25 return alert("説明を入力してください。") 26 } 27 const updateUser = response 28 // 以下ユーザー情報更新 29}

上記関数でバリデーションに引っかかった場合、アラートが表示され、作成または更新を中止できるかと思います。

しかし元のコードと比較して、コードの総量は増え、返り値の判定で結局共通するコードが発生したため、簡素化できていないと言えます。

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

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

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

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

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

takasima20

2021/05/14 01:07

関係ないけど、複数の return で毛色の異なるものを返すのはもやっとします。
guest

回答3

0

下記のようにバリデーションを関数化しました。

バリデーション結果に入力値を返す必要ないのでは。
true/falseを返してfalseならそのまま終了で良いと思いますよ。
新規と更新ですべて同じ項目とは限らないでしょうし、今後別の画面でも使う可能性も加味すると、あくまで「バリデートの結果」だけ返すようにしたほうが汎用的です。
で新規は新規、更新は更新でほしい項目を取る。

もっとやるなら、data属性でバリデーションルール定義して、validationメソッドにはformタグのidだけ渡して、そのform配下でバリデートルールが指定された入力項目だけバリデート行うようにするとかですね。

投稿2021/05/14 00:31

m.ts10806

総合スコア80859

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

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

0

ベストアンサー

情報の取得とチェックは別に考えた方がいいかも。
例えば

javascript

1function check_ok(data) { 2 if(!data.name) { 3 alert("名前を入力してください。") 4 return false 5 } 6 if(!data.description) { 7 alert("説明を入力してください。") 8 return false 9 } 10 return true 11} 12 13const createUser = () => { 14 const newUser = {name: getInputNameValue(), des: getInputDesValue()} 15 16 if (!check_ok(newUser)) return 17 18 // 以下ユーザー情報作成 19} 20 21const updateUser = () => { 22 const updateUser = {name: getInputNameValue(), des: getInputDesValue()} 23 24 if (!check_ok(updateUser)) return 25 26 // 以下ユーザー情報更新 27}

投稿2021/05/14 11:05

takasima20

総合スコア7460

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

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

0

複雑なvalidateが必要ならjquery.validate.jsなどライブラリを利用されるとよいでしょう。
普通はpattern属性とかで十分だと思いますけどね

投稿2021/05/14 00:58

yambejp

総合スコア115010

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問