電子書籍の厳選無料作品が豊富!

いつもお世話になっております。

PHP初心者です。

preg_matchを使って文字の書式をチェックしたいのですが文字の書式が

12.3 x 45.6 x 78.9

[{数字(0~99.9)}{半角スペース}{エックス}{半角スペース}数字(0~99.9){半角スペース}{エックス}{半角スペース}{数字(0~99.9)}

のような書式かどうかチェックするにはどうしたらよいですか?

これは物のサイズだと思ってください。単位は[cm]です。

以下の感じで作ってみましたがダメでした。

if (!preg_match("/^[0.1-99.9]\s{1}\x\s{1}[0.1-99.9]\s{1}\x\s{1}[0.1-99.9]$/", $_POST['size'])) {
$error['size'] = 'no';
}

よろしくお願いします。

A 回答 (1件)

正規表現の「[~]」は、その中で指定したどれかの一文字にマッチします。

2文字以上の文字列にはマッチしません。
「[0.1-99.9]」の場合は0~9 のどれかの文字に1文字にはマッチしますが、「99.9」という4文字の文字列にはマッチしないのです。

あとは、「{エックス}」を示すのは「x」で十分で、「\x」にしちゃだめです。

まず「数字(0~99.9)」がどういう指定なのかがちょっと情報が不十分なのですが、
小数点はなくてもいいということだったら、
・整数: 「0~9」または「10~99」
・小数: 上述の数にさらに「.0~.9」が続く
ということで、数値を示す正規表現は「([0-9]|[1-9][0-9])(\.[0-9])?」になります。

まとめると、
"/^([0-9]|[1-9][0-9])(\.[0-9])?\sx\s([0-9]|[1-9][0-9])(\.[0-9])?\sx\s([0-9]|[1-9][0-9])(\.[0-9])?$/"
でいけるでしょう。
    • good
    • 0
この回答へのお礼

回答有難うございます。

無事できました。

お礼日時:2011/03/01 23:52

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