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

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

新規登録して質問してみよう
ただいま回答率
85.50%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

407閲覧

Perl・CGIで正規表現「よみがな」として入力しているところに漢字がある場合、エラーを出したい

lumilathe14th

総合スコア7

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2017/12/30 06:42

編集2017/12/30 09:48

###前提・実現したいこと
Parlで名前や企業名などを入力する時の「読み仮名」に「あああ株式会社」などの漢字が混じってしまっていても、漢字が入力されていると認識されずに登録されてしまいます。
もし、「読み仮名」入力欄に漢字が入力されている場合はエラー画面を表示させたい。

###該当のソースコード
if ($FORM{'yomi'} =~ /[\x88-\x9f\xe0-\xef]/g) { &error('読みに漢字が混ざっています。1'); }
if ($FORM{'yomi'} =~ /[\x40-\x7e\x80-\xfc]/g) { &error('読みに漢字が混ざっています。2'); }

###試したこと
演算子が違うのか、もしくは文字コード(使用しているのはshift_JIS)の切り方が違うのかと少し悩み、いろいろ(!~等)を試しましたが、正規表現もわからず、文字コード指定が間違っているのか分からず困っています。

###補足情報(言語/FW/ツール等のバージョンなど)
見よう見まねでやっているので良く判りません……
前後に
if ($FORM{'word'} !~ /[\x82][\x9f-\xF1]/g) { &error('英語は使えません。'); }
if ($FORM{'yomi'} =~ /\s/) { &error('読みに半角スペースが混ざっています。'); }
とあるので、このような例を参考に記述していますが、上手くできずに困っております。

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

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

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

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

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

KSwordOfHaste

2017/12/30 06:49

正規表現はツール、言語によって微妙に仕様が違います。また前提とする文字セットにも影響を受けます。まずはツール・言語・文字セットを明記すべきと思います。
退会済みユーザー

退会済みユーザー

2017/12/30 07:04

入力値の確認なのであれば、仕様は「よみがなにひらがな(+数字?)以外が使われたらNG」じゃないですか?
lumilathe14th

2017/12/30 07:27

ありがとうございます。どうやら「漢字での記述のみを弾く」とばかり考えてしまっていたので、「平仮名、数字以外を弾く」という発想に至りませんでした。帰宅したら少し試して見ます。
KojiDoi

2017/12/30 08:53

parlではなくperlですので。修正しておいたほうがいいでしょう。
guest

回答1

0

ベストアンサー

「ひらがな以外が含まれる文字列を弾く」をperlで処理するなら、perlの拡張正規表現で便利な機能が用意されているので、これを利用するのが良いでしょう。

perl

1use Encode; 2 3(中略)$txtにshiftjisの文字列が代入されると仮定 4 5my $txt_e = decode("cp932", $txt); # shift-jis -> inner_code 6if($txt_e =~/[^\p{Hiragana}]/){ 7 print "bad characters are included.\n"; 8}else{ 9 print "ok.\n"; 10}

なお、カタカナにマッチする正規表現なら\p{Katakana}、漢字にマッチする正規表現なら~~\p{Xan}~~\p{Han}が使えます。

投稿2017/12/30 08:09

編集2017/12/30 13:43
KojiDoi

総合スコア13669

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

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

scivola

2017/12/30 13:33

漢字は \p{Xan} でなく \p{Han} ではないでしょうか。
KojiDoi

2017/12/30 13:43

その通りでした。修正しておきました。
lumilathe14th

2017/12/30 14:00

ありがとうございます、少し悩みながらでしたか実装できました! 以前管理していた人が失踪してしまい、「これくらいなら……」と気安く引き受けてしまった挙句、いろいろな方の力添えをしていただき、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問