0

PHP PCRE に問題があり、POSIX に慣れているので、何が間違っているのかよくわかりません。基本的に、この関数は、カンマで区切られた最大 10 個の数字に一致します。ただし、文字列sdf(およびおそらく他の多くの文字列) にも一致していますが、その理由はわかりません。誰でも私を助けることができますか?

$pattern='^\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?^';

$leftcheck=preg_match($pattern, $leftmodules);
$centercheck=preg_match($pattern, $centermodules);
$rightcheck=preg_match($pattern, $rightmodules);

if(!$leftcheck OR !$centercheck OR !$rightcheck)
{
$editpage = $_SERVER['HTTP_REFERER'].'?&error=1';
die("Location:$editpage");
}
4

5 に答える 5

3
^\d{1,5}(, *\d{1,5}){0,9}$
于 2009-10-14T03:36:58.797 に答える
1

From what I can see, the regular expression you provided will match anything you pass into it. Here's why

\d{0,5}     #\d matches any digit character, while {0,5} means the
            #preceding character must be repeated between **0** and five times

So your regular expression is essentially short circuiting. The engine see the first character of your string and says "has a digit been repeated 0 times? Yes? OK, it's a match!

于 2009-10-14T06:54:09.337 に答える
1

私は次のことを想定しています:

  • スペースがある場合とない場合があります。
  • 数値は任意の長さにすることができます。
  • 数字、スペース、カンマのみ使用できます。
  • 末尾に数字のないカンマは許可されます。
  • カンマで区切られた 1 ~ 10 個の数字は問題ありません。

とすれば:

$pattern = '/^(\d+,* *){1,10}$/';

動作します。

于 2009-10-14T04:22:47.360 に答える
0

あなたの番号がコンマだけで区切られているなら、このような何かがそれをするべきだと思います

$pattern = '^\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5}$';
于 2009-10-14T03:34:06.553 に答える
-1

パターンを有効にするには、2 つの等号の間にパターンを含める必要があります。人々は通常 / を使用します。

$pattern = '/some pattern/';

最初に ^ 、最後に $ を付けたいもの全体に一致させます。これを間違えたことが、おそらくあなたsdfが一致していた理由です。

$pattern = '/^whole pattern match$/';

数字がどのように区切られるかは少し混乱します。コンマですか、それともスペースですか。どちらでもOK? なしはどうですか?これが私の最善の推測です。

$pattern = '/^\d{,5}[, ](\d{,5}[, ]){,9}$/';
于 2009-10-14T03:47:03.843 に答える