Vuetifyを使って電話番号フォームのvalidation

updated: 2021/4/27

 

環境)

vue@2.6.12

vuetify@2.3.18

vuex@3.5.1

 

vuetifyのv-textfieldを使って電話番号のフォームvalidationを実装する

フォームのフィールドは電話番号全体で一つとするのではなく、ハイフンで区切って3つのフィールドを持つものとする。

 

         v-textfieldを使った場合,

valueNumber, strどちらでも指定で出来る

valueNumberをパスした場合、入力前はNumber、入力後はvaluestrとして処理される。

validationは数値をパスされた場合を考慮してString(v)または、v.toString()をしたほうが良い。(フィールドにstringとnumberの両方を想定している場合)

valueをあらかじめStringに変換しようとするとdataであれば値が空でも機能するがvuexを使用した場合undefinedとなってしまう。

type="number"を指定すると半角英数字しか入力を受け付けなくなる。この時、validation時はstringとして認識され、v.lengthが機能する。

 

 

 

value(電話番号等ユーザー情報)はデータとしてコンポーネントが単独で保持する場合は少なくvuex stateで管理することが想定される。

 

f:id:monteecristoo:20201122211008p:plain

f:id:monteecristoo:20201119210913p:plain 

computed: {

f:id:monteecristoo:20201119185942p:plain

}

 

rules: {

f:id:monteecristoo:20201119211103p:plain

}

フィールドがrequiredの場合は

[

  v => (!v || v.length < 6) || "有効な電話番号を入力してください",

  v => !!v || "入力必須の項目です"

 ]

 

また、フィールドをまたいだvalidationはvutifyでは無いため、3つのフィールドが入力された場合submit可能にするといったvalidationは別途作成する必要がある。

 

以下、フォーム内のフィールドが入力済みになり、かつinputに変更があった場合のみsubmit可とするvalidation

 

submitボタンをフィールドがそろわない場合disableにする。

<v-btn :disabled="!submitReady">Submit</v-btn>

 

computed: {
  submitReady() {

    if(!this.valid) {

      return false

    } else if(!this.editted) {

      return false

    } else {

      return true

    }

  }

}

// this.validは上述のrulesがvalidであるか、this.edittedはこれから新たに定義するvalidationのパラメータ

 

@input="userSettingEditted('phoneNumber' , form.phoneNumber.key, form.phoneNumber.value)"

 

f:id:monteecristoo:20201122211200p:plain

 

フィールドに値が入力されるlazyValueに値が挿入されるので値があるか確認

v-textfieldをv-forを使わないとrefを配列形式で取得できないためrefs.someが使えなくなる。

値の有無の判断を簡単にするため、textfieldはv-forを使う。

f:id:monteecristoo:20201122211616p:plain

ref)

jp.vuejs.org