1. ホーム
  2. javascript

[解決済み] マッチを使用した正規表現によるYup検証問題

2022-02-19 06:41:51

質問

そこで、以下のようなバリデーションを うん :

const myValidtion = yup
.string()
.trim()
.matches(/[abcdefghijklmnopqrstuvwxyz]+/ , 'Is not in correct format')
.required();

ということで、これなら合格です。 hello world 予想通りです。しかし、私が混乱しているのは、なぜこれもパスするのかということです。 hello WORLD あるいは、これもパスします。 hello ,&$#$ world

一方、無効な文字だけを入力する場合、例えば *%$&#$($# というエラーが表示されます。つまり、次のような場合にのみエラーが発生します。 すべて が無効であることを示します。

私が探しているのは、Yup matchesメソッドを使って、ユーザーが例えば.NETを入力した場合、パスしない方法です。 hello ,*&) world

どなたか教えてください。

どのように解決するのですか?

正規表現は、文字列全体をカバーする必要があります。 ^$ で、文字列の開始と終了を意味します。

/^[abcdefghijklmnopqrstuvwxyz]+$/

それ以外の場合は、文字列の一部にマッチします。そのため、良い文字と悪い文字が混在している場合はマッチしますが、すべての文字が悪い場合は失敗します。

このように文字範囲を指定することで、正規表現を短くすることができます。

/^[a-z]+$/

これを使用することができます オンラインツール を使用して正規表現を構築し、テストすることができます。