7

ユーザーが入力した正規表現を検証して、有効かどうかを確認できるようにしたい。filter_var定数を使用してPHPで最初に見つけたものFILTER_VALIDATE_REGEXPですが、オプションに正規表現を渡す必要があるため、それは私が望むことをしませんが、私は何も正規表現していないので、基本的には正規表現の有効性をチェックしています.

しかし、ユーザーが入力した正規表現 (何にも一致しない) を検証するにはどうすればよいかがわかります。

簡単な言葉で検証の例:

$user_inputted_regex = $_POST['regex']; // e.g. /([a-z]+)\..*([0-9]{2})/i

if(is_valid_regex($user_inputted_regex))
{
    // The regex was valid
}
else
{
    // The regex was invalid
}

検証の例:

/[[0-9]/i              // invalid
//(.*)/                // invalid
/(.*)-(.*)-(.*)/       // valid
/([a-z]+)-([0-9_]+)/i  // valid
4

2 に答える 2

6

ここにアイデアがあります(demo):

function is_valid_regex($pattern)
{
    return is_int(@preg_match($pattern, ''));
}

preg_match() は、パターンが一致した回数を返します。preg_match() は最初の一致後に検索を停止するため、これは 0 回 (一致なし) または 1 回のいずれかになります。

エラーが発生した場合、preg_match() は FALSE を返します。

パターンが有効でない理由を取得するには、 を使用しますpreg_last_error

于 2012-04-06T19:39:50.040 に答える
2

正規表現を検証するには、独自の関数を作成する必要があります。不正な文字や不正な形式が含まれているかどうかまでは検証できますが、それが機能する式であることをテストする方法はありません。そのためには、ソリューションを作成する必要があります。

しかし、実際には無効な正規表現など存在しないことがわかります。正規表現はパフォーマンスベースです。一致するか一致しないかは、テストの対象によって異なります。式やその結果が一見無意味に見える場合でも同様です。

つまり、有効な構文についてのみ正規表現をテストできます...そして、それはほとんど何でも可能です!

于 2012-04-06T19:27:47.473 に答える