アプリ版:「スタンプのみでお礼する」機能のリリースについて

ASCII文字列(半角英数・記号)以外を検出する正規表現を教えてください。
WEBで検索したのですが探し方が悪いのか見つかりませんでした。

A 回答 (4件)

No.2です。

制御コードも含める、というのであれば、16進数のコードで範囲指定すればいいのではないでしょうか。

if (ereg("^[\x01-\x7f]*$", $str)) {

※\x00からにすると、null文字と見なされてPHPがWarningを出してしまったので\x01からになっています。
    • good
    • 0
この回答へのお礼

ereg("^[\x01-\x7f]*$", $str)

なるほど、こういうやり方があるんですね。これで思ったとおりに動作しました。改行コードやタブ、エスケープなども問題ないようです。

ありがとうございました。

お礼日時:2007/01/12 09:02

#1です。


質問内容と補足に書かれたコードがあってません。
$str の中に「半角英数記号」以外の文字が1文字でもあるかどうかを調べたいという質問じゃなかったのですか?

if (ereg("[^!-~]", $str)) {
echo "半角英数記号以外がある";
} else {
echo "すべて半角英数記号である";
}
空白は記号じゃないという判断で[^!-~]にしましたが、もし空白も記号に入れるなら[^ -~]です。改行コードはまさか記号に含めないですよね?

この回答への補足

質問は「ASCII文字列以外を検出する正規表現を教えてください」です。空白や改行、タブやエスケープなどもASCII文字列だと思います。

補足日時:2007/01/12 07:09
    • good
    • 0

$strに空白や\n\r(改行)も入ってますが、これらも含めるのですか?


空白を含めて改行は含めないのなら、

if (ereg("^[ -~]*$", $str)) {

とすればいいと思いますが、改行も含める(複数行のパターンマッチを行う)のであれば、

if (preg_match("/^[ -~]*$/m", $str)) {

とすればいかがでしょうか。
    • good
    • 0
この回答へのお礼

if (preg_match("/^[ -~]*$/m", $str)) {

として試してみましたが、$str = "aAzZ\n\r &*()#あ@"; のように日本語を含めた場合も true が返ってしまいました。

お礼日時:2007/01/12 07:08

[^!-~]



半角記号の最小値!と最大値~の範囲の否定で表します。英数字もこの範囲に含まれます。

この回答への補足

[^!-~]を試して見ましたがうまく行きませんでした。

PHPで以下のようにやっているのですがこれをどのように変えたらいいでしょうか?

$str = "aAzZ\n\r &*()#@";

if (ereg("^[a-zA-Z0-9]*$", $str)) { // このままだと英数字のみ検証
echo "すべてASCII文字である";
} else {
echo "すべてASCII文字ではない";
}

補足日時:2007/01/11 09:19
    • good
    • 0

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