-4

次のルールに対して文字列を検証するにはどうすればよいですか。

$string = 'int(11)';

Rule: first 4 characters MUST be 'int('
Rule: next must be a number between 1 and 11
Rule: next must be a ')'
Rule: Everything else will fail

経験豊富な PHP 開発者 - 正規表現は私の得意分野ではありません..

どんな助けや提案も歓迎します。みんなありがとう..

4

3 に答える 3

4
if (preg_match('/int\((\d{1,2})\)/', $str, $matches)
    && (int) $matches[1] <= 11 && (int) $matches[1] > 0
   ) {
    // ... do something nice
} else {
    echo 'Failed!!!'
}

または、pReg ライブラリを使用したくない場合 (より高速になる可能性があります):

$str = 'int(11)';
$i = substr($str, 4, strpos($str, ')') - 4);

if (substr($str, 0, 4) === 'int('
    && $i <= 11
    && $i > 0
   ) {
    echo 'succes';
} else {
    echo 'fail';
}
于 2013-03-16T14:32:13.277 に答える
4

この正規表現を使用しますint\((\d|1[01])\)

int\((最初のルール

(\d|1[01])第二のルール

\)第三のルール

于 2013-03-16T14:32:51.543 に答える
2

この正規表現はさらに小さくなっています。

int\((\d1?)\)

またはキャプチャ グループなし (数値を取得する必要がない場合)。

int\(\d1?\)
于 2013-03-16T14:59:36.940 に答える