-5

5 つの単一文字の配列があります。それらは、次の正規表現でチェックされます。

$regex = "/[a-zA-Z0-9]/";

単一の文字が許可されているかどうかを確認するにはどうすればよいですか?

4

6 に答える 6

4

配列を受け入れるpreg_grepも使用できます。

$matchedArray = preg_grep("/[a-zA-Z0-9]/", $array);

ドキュメントに従って: preg_grepは、指定されたパターンに一致する入力配列の要素で構成される配列を返します。

次に、次のことができます。

if ($array === $matchedArray)
    echo "matched\n";
于 2012-10-26T12:55:11.613 に答える
1

それらを文字列としてチェックしてみませんか?

if (preg_match('/^[a-z0-9]+$/i',implode('',$yourCharArray)))
{
    echo 'all chars are ok';
}

ああ、あなたが疑問に思ってい/[a-z]/iた場合/[a-zA-Z]/iは大文字と小文字を区別しないフラグです。

あなたのコメントが私に信じさせるように、それでも各要素を個別にチェックしたい/必要がある場合:

foreach($yourChars as $char)
{
    if (!preg_match('/[a-z0-9]/i',$char))
    {
        echo 'Error: '.$char.' is not allowed';
    }
}

ただし、この場合、正規表現を使用しないことをお勧めします。ただ:

if (!ctype_alnum($char))

やります、それはより速く、あなたがする必要があることを正確に行います。ドキュメントを参照してください。
繰り返しになりますが、配列を内破し、結果の文字列の長さを確認する方がはるかに高速です。

$check = implode('',$charArr);
if (strlen($check) > 5 || !ctype_alnum($check))
{//more than 5 chars, other chars than a-z/0-9
    echo 'invalid input';
}
//if > 5 should be allowed, but the array elements should be single chars:
if (strlen($check) > count($charArr) || !ctype_alnum($check))
于 2012-10-26T12:58:24.087 に答える
0

まず、入力にパターンだけが含まれていることを確認する必要がある場合は、アンカーを追加する必要があります。

^pattern$

^は文字列/行の始まりであり$、終わりです。

パターンについてはこちらをご利用ください >>

1 文字:

[a-zA-Z0-9]

なしまたは 1 文字:

[a-zA-Z0-9]?

1 つ以上の文字:

[a-zA-Z0-9]+

なしまたはそれ以上の文字:

[a-zA-Z0-9]*

正確な文字数 (n):

[a-zA-Z0-9]{n}

範囲内の文字数 (n,m):

[a-zA-Z0-9]{n,m}

n 個以上の文字:

[a-zA-Z0-9](n,}

n 文字以内:

[a-zA-Z0-9]{0,n}
于 2012-10-26T12:59:57.460 に答える
0

あなたの質問がよくわかりませんが、配列をループすることはできますか?

$myArray = ('0', 'a', 'b', 'c', 'L');
$validArray = true;
foreach ($myArray as $value) {
    if (preg_match("/[a-zA-Z0-9]/", $value) == 0)
            $validArray = false;
}

これにより、配列全体が検証され、それを関数にラップできます。しかし、私が言ったように、私はあなたが何を必要としているのか正確にはわかりません.

補足として、これから関数を作成できます。

function validateArray($arr) {
    $validArray = true;
    foreach ($arr as $value) {
        if (preg_match("/[a-zA-Z0-9]/", $value) == 0)
                $validArray = false;
    }
    return $validArray;
}

$myArray = ('0', 'a', 'b', 'c', 'L');
$myArrayValid = validateArray($myArray);
于 2012-10-26T13:03:45.163 に答える
0

配列を繰り返し処理し、このパターンに一致するかどうかを 1 つずつ確認しますか?

于 2012-10-26T12:54:16.300 に答える
0

あなたの正規表現には数量が定義されていません

{} を使用してそれを行うことができます。次の正規表現は、[] で指定された種類の 1 ~ 5 文字を受け入れます。

[a-zA-Z0-9]{1,5}

または、「1 つ以上」に「+」を使用するか、コンマを使用せずに文字数を固定することもできます。

于 2012-10-26T12:55:37.947 に答える