kyky060507
@kyky060507 (129 kiat)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Google フォームの正規表現】を使って、パスポートのように大文字のみの氏名を入力させる

記述式の質問で、外国人向けに大文字のローマ字で名前を入力する欄を作りたいと思っています。自分でネット記事を参考にしながら以下のように設定しましたが、上手くいきません...どなたかご教示頂けないでしょうか。

【設定したい条件】

・大文字のローマ字のみに制限
・苗字やミドルネーム、名前に半角スペースを必ず含める
・2語以上からなる苗字やミドルネーム、名前がある場合は1語ずつ半角スペースを必ず含める
・長い名前に対応できること

イメージは以下のように1語ずつに半角スペースを空けなければ入力できないようにしたいと思っています。

(例) WILLIKM BRGDLEY PITT WILLIKM BRADLEW

【自分で作った正規表現①】

[A-Z]{1,30}\s[A-Z]{1,30}|[A-Z]{1,30}\s[A-Z]{1,30}\s[A-Z]{1,30}|[A-Z]{1,30}\s[A-Z]{1,30}\s[A-Z]{1,30}\s[A-Z]{1,30}|[A-Z]{1,30}\s[A-Z]{1,30}\s[A-Z]{1,30}\s[A-Z]{1,30}\s[A-Z]{1,30}

上記の設定は最大5語(苗字やミドルネーム、名前を含めて)からなる大文字のローマ字を1語30文字まで入力できるように設定したつもりです。

しかし、フォームの設定の「一致する」、「次を含む」ともに設定通り入力してもエラー表示が出てしまいます。

【自分で作った正規表現②】

[A-Z]{1,30}\s[A-Z]{1,30}

この場合フォームの設定の「一致する」は設定通り入力してもエラー表示が出ます。
フォームの設定を「次を含む」に変えると、設定を満たしていない回答も入力できるようになってしまいます。(半角スペースが1個以上あれば回答できてしまう状態)

色々な国籍の方々に入力してもらうフォームなので難しいかもしれないのですが、どうにか設定したい条件をクリアした正規表現を探しています。

よろしくお願いします。

【参考】

Google公式ヘルプページ
https://support.google.com/docs/answer/3378864?hl=ja#zippy=%2C%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%AE%E4%BE%8B

0

1Answer

このような正規表現はいかがでしょうか?

^[A-Z]+(\s[A-Z]+)+$

Googleフォームで軽く動かしてみましたが、行頭と行末を指定しているので、「次を含む」でも「一致する」でもうまく動いているようでした。



分解して解説すると以下のようになります。

^[A-Z]+

^は行頭を意味します。
これで大文字アルファベットで始まり、大文字アルファベットの1つ以上の繰り返しを表します。

(\s[A-Z]+)+

(1つのスペースと大文字アルファベットの1つ以上の繰り返し)の1つ以上の繰り返しを表します。
つまり、「(s)ABC」「(s)ABC(s)ABC」「(s)ABC(s)ABC(s)ABC」...のような文字列がヒットしてきます。
 
最後に$は行末を意味します。大文字のアルファベットで終わるものだけをヒットさせます。

0Like

Comments

  1. @kyky060507

    Questioner

    とてもわかりやすくありがとうございます。
    1つのスペースと大文字アルファベットの1つ以上の繰り返しということは本来3つスペースが必要な名前でも、誤って1つしかスペースを空けずに大文字入力すれば、できてしまうということですよね。

    (正しい入力)WILLIKM BRGDLEY PITT WILLIKM
    (誤った入力)WILLIKM BRGDLEYPITTWILLIKM

    言い換えるなら、人の名前はそれぞれでパターン数が多すぎるから、正規表現ではそこまでの制限がかけられないということでしょうか?
  2. そうです。人の名前は自由につけられるため、正規表現に限らず単純な文字列チェックでは難しいです。

    たとえば、JOHN(ジョン)、JOHNNY(ジョニー)、JOHNSON(ジョンソン)、を名前に持つ3名がいるとします。「JOHN」という名前があるからその文字の後は空白があるべきだとすると、「JOHNNY」「JOHNSON」は入力できなくなってしまいます。

    ですので、氏名入力チェックは姓名が分かれているかのチェック(半角スペースが少なくとも1つあるかのチェックか、それか最初から姓名で入力するところが分かれているか)くらいで、切るべきところで空白区切りになっているかのチェックはしていないと思います。

    入力しうる名前のデータがあるなら、それと一致するかのチェックというのはあったりするかもしれません。
  3. @kyky060507

    Questioner

    ご返信ありがとうございます。
    やはり、正規表現でここまで細かいものを求めるのは難しいようですね。
    わかりやすくご説明していただけたおかげで、よくわかりました。

Your answer might help someone💌