Perlである文字列に英数文字だけしか含まれていないかどうかを判定する方法

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/05/27 01:32:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:ootatmt No.1

回答回数1307ベストアンサー獲得回数65

ポイント100pt

my $chr = "abc123";

if ($chr !~ /[\x81-\xFC]/) {

print "英数文字のみ";

}

こんな感じですね。

id:dayofgreen

ありがとうございます。

2006/05/27 01:32:00
  • id:pmakino
    上記回答は「1バイト文字のみしか含まれていない」かどうかの判定ですね。
    (英数文字のほか空白やコントロールコード、各種記号も含まれる)

    英数文字 (a~z,A~Z,0~9) しか含まれていないことを判定するのであれば、
    if ($str !~ /[^a-zA-Z0-9]/) { print "英数文字のみ"; }
    かと。

    詳しくは
    http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k08.htm
    等をどうぞ。
  • id:villain

    > $str !~ /\W/g

    では?

    $str1 = "abcde1234";
    if($str1 !~ /\W/g) {
    print "str1: 英数文字のみ\n";
    } else {
    print "str1: 英数文字以外が含まれています\n";
    }

    $str2 = "abcde1234あいうえお";
    if($str2 !~ /\W/g) {
    print "str2: 英数文字のみ\n";
    } else {
    print "str2: 英数文字以外が含まれています\n";
    }

    ただし、UTF-8以外のUnicode(UTF-16など)では上記はうまく動作
    しないと思いますが。
  • id:ootatmt
    [^a-zA-Z0-9] と \W はアンダースコアが含まれるかどうかが違いますね。
    元の質問者の方は、たぶん掲示板などで英文スパムを排除したかったのだと思い1バイト文字を全部判定の対象にしました。
    質問文にあるように厳密に英数文字だけを判定対象にするなら a-zA-Z0-9 の範囲でいいですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません