■環境
Linux, Perl 5.8 です。
画面(HTML)と処理(Perl)は分けて作成しており、Templateモジュールで画面表示を行っています。
HTMLもPerlも文字コードはUTF-8です。

■質問
フォームからうけとった文字列で全角カタカナと特定の全角記号以外はエラーとする
入力チェック処理(正規表現)がうまくチェックを行ってくれません。
SJISだと以下のような書き方があるそうなのですが、UTF8での書き方がわかりません。

・SJIS
if($data !~ /^(?:\x83[\x40-\x96])+$/){
$mes="全角カナ以外の文字が指定されています";
}

UTF8での書き方を教えて頂きたいです。
なお、許容する全角カタカナと特定の全角記号は以下のとおりです。
==========================================================
アイウエオカキクケコサシスセソタチツテトナニヌネノ
ハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン
ァィゥェォッャュョヵヶヴガギグゲゴザジズゼゾダヂヅデド
バビブベボパピプペポーヽヾ
==========================================================

ご教授お願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Unicode ブロック指定の


\p{InKatakana}
なんかが使えると楽かも.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q外付けHDDを物理フォーマットした後のエラーチェックは意味ない?

外付けHDDを物理フォーマットした後のエラーチェックは意味ない?

外付けHDDをレグザにつなげて録画していました。
しかし、途中で止まったり不調になったので PCで物理フォーマット5時間かけてやりました。
この後PCで不良クラスタのチェック・エラーチェックをしたほうがいいのでしょうか?

物理フォーマットをしたままレグザにつなげればいいのでしょうか?

Aベストアンサー

物理フォーマットしただけではHDDは使えないので、
必ずその後に論理フォーマット(セクター割、FAT作成等)が
なされるはずです。
そのときに不良クラスターは回避されると思います。

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Qチェックボックスの表示の意味

設定項目でよく見かけるチェックボックスの表示で

1 白のバックにチェックが入っているもの。
2 グレイのバックにうっすらとチェックが入っているもの。
3 白でチェックの入っていないもの。

この3つで
1と2の違いを教えて下さい。
私が調べたところ、2は
“指定されている変換モードで使う”
とあったのですが 意味がよくわかりません。
使い分け方法も含めて 宜しくお願い致します。

どのカテゴリで質問したらいいのか わからなかったので
ここに書き込みました・・

宜しくお願い致します。

Aベストアンサー

これは、複数のものを一度に設定する場合の状態です。

白のバックにチェック:
 全てをチェック状態にする場合

グレーバックにチェック:
 チェックしているもの、チェックしていないものが混在している状態

グレーバックは複数の設定を変更していない状態を表すものです。
グレー状態をクリックすると白バックチェックありになり、もう1回チェックすると白バックチェックなし、さらにもう1回でグレーバックに戻ります。

使い方としては、キャンセルと同様ですね!

Qperlでuse utf8でsjisのファイルを読んで出力すると誤表示する。

下記のソースで誤表示しない方法を知りたい。
1 use utf8
2 use Encode;
3 use open IO => ":encoding(sjis)";
4 binmode STDOUT,':utf8';
5 open (IN,'03.txt')||die "file ope err\n";
6 @in=<IN>;
7 close IN;
8 @in=();
9 print @in;

下記のエラーが出る。
shiftjis "\x87" does not map to Unicode at C:\Users\usui\EDMax\DataGen6\03.pl line 6, <IN> line 2175.

Aベストアンサー

丁度いいのがあったので。
http://charset.7jp.net/sjis.html

\x87 ということは、この表の「シフトJISの2バイトコード(全角文字)のエリアマップ」の「13/14 87」というところに並んでいる ①みたいな数字とか 一文字で表した ローマ数字 ( I , II , III 等) を使っていませんか?

これらの文字は「Shift_JIS」には無い文字です。
よって、Unicodeに変換できません。

Shift_JISを拡張した CP932 などには、これらの文字が含まれています。
https://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932

sjisではなく、cp932で試してみてはいかがでしょうか

Qこのチェックのやり方 意味ある?

業務がいくつか担当に分かれているのですが
経費削減のせいで私は一人である作業をやらなくてはいけなくなりました。

今までは自分で作ったものをまず自分でチェックして
次に他の人がチェックしてダブルチェックでした。

けど今回私が今の部署で一人の担当になったので
「自分で作ったものを自分でチェックして、
更にもう一度自分でチェックしてダブルチェックにして」
と言われました。

このチェックの仕方に意味はあるのでしょうか?

一般的にダブルチェックと言うのは
2名がチェックするものだと思っていたのですが
作成した人間が2回チェックをすることでミスを見抜けるのでしょうか?

作成するものは書類です。
私以外の他の部署は2名体制でチェックをしています。
他部署は別の場所(場居る)にあるので
遠いし時間がかかるし、私が作った書類を持って行くことはできません。
(ファイリングしているのでPDFにするのも時間がかかります)

私の上司は会議とか他の作業をするため私の作業をチェックしている余裕はありません。

この場合、書類の内容にミスがあったら私だけの責任になるのでしょうか?
私がチェックを一人でやる事に関しては、上司が自分の上司にも確認済みのようです。

業務がいくつか担当に分かれているのですが
経費削減のせいで私は一人である作業をやらなくてはいけなくなりました。

今までは自分で作ったものをまず自分でチェックして
次に他の人がチェックしてダブルチェックでした。

けど今回私が今の部署で一人の担当になったので
「自分で作ったものを自分でチェックして、
更にもう一度自分でチェックしてダブルチェックにして」
と言われました。

このチェックの仕方に意味はあるのでしょうか?

一般的にダブルチェックと言うのは
2名がチェックするものだと思ってい...続きを読む

Aベストアンサー

精神論は置いておくとして、そのやり方は内部牽制の観点からは意味がないし、内部統制の観点からはダブルチェックですらないぜ。

人間がおこなう以上は、ミスを回避できないものだ。ミスにはひとりひとりに癖がある。チェックする際の見落としミスにも癖があるものだ。だから、同じ人間が複数回チェックしても見落とす部分が生じうる。

別の人間がチェックすれば、見落としの可能性は確実に減らせる。だから、内部統制のダブルチェックでは、少なくとも1回は他人がチェックすることになってるんだ。


ただ、費用対効果の問題もある。重要な作業でなければ、自己チェックのみとするのもやむを得ないだろう。どう考えても重要度の高い作業だと思うのなら、ここは押さえ所だと上司に進言してはどうだろう。


なお、責任追及の面では、そういう忙しくて部下にすら構ってられない職場の場合、ふたつのパターンのいずれかになることが多い。ミスがあってもうやむやなまま流されるか、またはミスをした当人だけ責任追及をしてお仕舞いとしてしまうかの、どちらかだ。

Q[perl5.8] SJISで出力したはずのファイルにutf8フラグが

1)SJISで以下の2行を含むファイルを作成し、
  sjis.txtという名前で保存します。
"ホツカイドウ"
"北海道"
2)SJISで以下のスクリプトを作成します。
#=== one.pl ===
use encoding 'Shift_JIS';

use open IN => ":encoding(Shift_JIS)";
use open OUT => ":encoding(Shift_JIS)";

my $infile = 'sjis.txt';
my $outfile = 'sjis2.txt';

open(IN, "<$infile");
@lines = <IN>;
close(IN);

open(OU, ">$outfile");
print OU @lines;
close(OU);

3)SJIJSで以下のスクリプトを作成します
#=== two.pl ===
use encoding 'Shift_JIS';

use open IN => ":encoding(Shift_JIS)";
use open OUT => ":encoding(Shift_JIS)";

my $infile = 'sjis2.txt';
my $outfile = 'sjis3.txt';

open(IN, "<$infile");
@lines = <IN>;
close(IN);

open(OU, ">$outfile");
print @lines;
close(OU);

4)one.pl を実行し、続いてtwo.plを実行すると
以下のエラーがコマンドプロンプトに表示されます。
#-------------------------------------------
D:\zipcode\utf8mondai>two.pl
Wide character in print at D:\zipcode\utf8mondai\two.pl line 14.
"・趣セゑスカ・イ・・セ橸スウ"
Wide character in print at D:\zipcode\utf8mondai\two.pl line 14.
"蛹玲オキ驕・

これは何故なのでしょうか。
エラーメッセージは、printしようとしている
文字列にutf8フラグがついているという意味
らしいです。

1)SJISで以下の2行を含むファイルを作成し、
  sjis.txtという名前で保存します。
"ホツカイドウ"
"北海道"
2)SJISで以下のスクリプトを作成します。
#=== one.pl ===
use encoding 'Shift_JIS';

use open IN => ":encoding(Shift_JIS)";
use open OUT => ":encoding(Shift_JIS)";

my $infile = 'sjis.txt';
my $outfile = 'sjis2.txt';

open(IN, "<$infile");
@lines = <IN>;
close(IN);

open(OU, ">$outfile");
print OU @lines;
close(OU);

3)SJIJSで以下のスクリプトを...続きを読む

Aベストアンサー

use encodingプラグマは、これから開かれるファイルハンドルの文字コードを明示的に示します。
そしてファイルハンドルから読み込む時に「フラグ付きUTF-8」に変換して変数に格納し、
書き出す時は「フラグ付きUTF-8」から指定の文字コードに変換、と言う動作を自動的に行うようになります。

これはこの後から開くファイルハンドルにのみ有効です。
すなわちuseした時点で既に開かれているSTDIN,STDOUT,STDERRはuse encodingの影響を受けません。
なので、STDOUTに出力しているtwo.plの
print @lines;
はUTF-8フラグつきの文字列をそのまま出力しようとしてしまうので、質問のような警告が発生します。

QBookSyncのIEタブの「変換前に削除する」チェックボックスの意味が分かりません。

BookSync2.43をダウンロードして設定を行っていますが、BookSyncのIEタブの「変換前に削除する」チェックボックスの意味が分かりません。

「変換ボタンを押してIEのお気に入りを変換先に指定する時に既存のお気に入りを削除したい場合にチェックを入れてください」とマニュアルには書かれていますが、意味不明です。

「変換前に削除する」チェックボックスにチェックを入れてBookSyncの「同期」または「変換」をクリックすると具体的にはどのようになるのでしょうか?もう少し噛み砕いて教えて下さい。

BookSyncの「同期」または「変換」の実行対象はGoogle ChromeとIE(IE7)の二つのブラウザーだけです。

Aベストアンサー

返還前に削除しないと、変換前には存在していて返還元には存在しないお気に入りが返還後に残ってしまうので。それを避ける機能です。

Qエラーログ「\x8ew\x92\xe8・・・」はどういう意味?

以下のような意味不明のサーバー「エラーログ」が出るのですが、何を意味しているのでしょうか?

スクリプト(フォームの入力値を取得するプログラム)の動作上はなんら問題はないのですが、必ず出るエラーなので、その意味が知りたいのです。

-------------
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
--------------

ActivePerl-5.6.1.638-MSWin32
Apache/2.0.55(Win32)

以下のような意味不明のサーバー「エラーログ」が出るのですが、何を意味しているのでしょうか?

スクリプト(フォームの入力値を取得するプログラム)の動作上はなんら問題はないのですが、必ず出るエラーなので、その意味が知りたいのです。

-------------
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
[Wed --] [error] [client --] \x8ew\x92\xe8\x...続きを読む

Aベストアンサー

Shift-JISの生バイト配列が文字になったモノですね。
デコードしてみると、

「指定されたパスが見つかりません」

となりました。
使用しているスクリプト中の、ファイルバスの部分を確認してみてください。
存在しないディレクトリやファイルを指定している部分があるのではないでしょうか。

Qチェックってどういう意味?

ファッション用語で チェック ってどういう意味ですか?

初歩的な質問ですいません

Aベストアンサー

チェックとは、格子模様や市松模様のようなパターンの柄の事です。なぜこのような模様をチェックと呼ぶのかといいますと、西洋で昔から遊ばれていたチェスから来ています。
チェスのボードが格子模様になっており、チェスの盤をチェッカーボードと呼ぶ事から、このような模様をチェックと呼ぶようになりました。

Q[Perl]ファイル出力のエンコード(EUC、SJIS、UTF8)を指定したい

EUCで書かれた文章を読み取ったにもかかわらず、S-JISで出力されます。
これを、任意の文字コードに指定して、出力する方法は無いものでしょうか?
ご存知の方、教えてください。
宜しくお願い致します。

Aベストアンサー

以下のサンプルは、コードをUTF-8 で記述して、標準出力をシフトJISで出力し、EUC-JPでファイルから入力します。
"<:encoding(euc-jp)" は、PerlIO レイヤの指定で、これを変えれば、ファイル出力を任意の文字コードにできます。
binmode STDOUT, ":encoding(euc-jp)";
のような指定もできます。
----------------------------------------------------------------
use encoding "UTF-8", STDOUT => "Shift_JIS";

open(FH, "<:encoding(euc-jp)", "EUC.txt");
while(<FH>){
print ;
}
close(FH);


人気Q&Aランキング

おすすめ情報