※ ChatGPTを利用し、要約された質問です(原文:英字のみを検索する正規表現について)
英字のみを検索する正規表現について
このQ&Aのポイント
正規表現を使用し、英字のみを検索する方法について質問しています。
利用者の登録スクリプトで、既に登録されている名前と重複しないようにするために正規表現を使用しています。
大文字小文字を区別せずに検索するためには、正規表現のフラグ'i'を使用することができますが、これが原因でエラーが発生しています。
利用者の登録スクリプトを作成しているのですが、その利用者の名前を日本語・英字・数字をOKにしており、データファイルに保存しています。
この中には例えば「管理者」「admin」「Admin009」の三つの名前があるとします。
次に新しい利用者が「管理者」という名前を登録しようとしてもNGになるように、既に登録されている名前は登録不可という感じにしています。
$nameが入力フォームの名前欄で、$dataがデータファイルとして、
if($name eq $data){
エラー文
}
などで同じ名前が登録されていたらNGにしています。
同じように「admin」で登録しようとしてもNGになるわけですが、この場合大文字小文字を区別しないようにしたいと思っています。
AdminやADMINなども不可能になるという事です。
その場合正規表現で、
if ($name =~ /$data/i){
エラー文
}
で大丈夫かと思ったのですが、このようにした場合500エラーが発生しました。(これはデータファイルの中に日本語も混ざってるからでしょうか?)
if ($name =~ /^$date/i){
エラー文
}
としたらエラーは出ずに、大文字の「ADMIN」や「adMin」などもNGにしてくれるのですが、「ADMINS」や「adminsss」などの名前も登録できなくなります。
先頭にマッチする「^」がある為、文字列の先頭に「admin」の文字列があるのでNGになると思うのですが、
私の希望では「admin」という同語(大小区別なく)に対してNGを出したくて、adminsは登録可能にしたいというのが希望の動作です。
このような場合、どのような正規表現が適しているか、もしお解かりになられましたらご教示いただけますと幸いです。
よろしくお願い致します。
お礼
ありがとうございます。 ご提示頂いた方法で希望の動作が実現できました。 日本語の処理ですが、一応やってはいるのですが、恐らくうまくいっていないみたいなので、教えて頂いた方法でまた着手させていただこうと思います。 ご丁寧にご教示頂きましてありがとうございました。