4

私はもう試した:

print_r(preg_match("[A-Za-z\\-]", $str));

そして、私は偽になっています。私は正規表現があまり得意ではありませんが、http://regexpal.com/で動作するようです

ここで何か不足していますか?

編集:例えば$str = zREBsZtyvw

4

5 に答える 5

7

説明

この式により、文字列に空白のない大文字、小文字、またはハイフンが 1 つ以上含まれていることが保証されます。

^[A-Za-z\\-]{1,}$

ここに画像の説明を入力

一致パターンの説明:

(^[A-Za-z\\-]{1,}$)

次のように一致します。

(グループ

^ 文字列の先頭

[A-Za-z\\-]{1,} 任意の文字: 'A' から 'Z'、'a' から 'z'、'\'、'-' (少なくとも 1 回 (可能な限り多く一致))

$ オプションの \n の前、および文字列の末尾

)グループ化の終了

PHP コード例:

<?php
$sourcestring="zREBsZtyvw";
preg_match_all('/^[A-Za-z\\-]{1,}$/i',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

$matches Array:
(
    [0] => Array
        (
            [0] => zREBsZtyvw
        )

)
于 2013-05-25T18:57:24.680 に答える
2

はい、アンカー (^および) を使用して、これらの文字のみで文字列を開始および終了$するように指定します。

print_r(preg_match("/^[A-Za-z\\-]$/", $str));
                     ^           ^
于 2013-05-25T18:47:08.860 に答える
1

実際、パターンの最初と最後にエスケープ文字 (/) がありません。グループ内の 1 文字のみに一致する [] を使用しています。

最良のパターンは、繰り返しと開始/終了アンカーを使用することです

"/^[a-zA-Z-]*$/"

print_r(preg_match("/^[a-zA-Z-]*$/", $str));

于 2013-05-25T18:48:08.017 に答える