正規表現が苦手です。php正規表現を行う方法、文字列の最初の単語が(a-h)
、2番目の単語が@
、3番目の部分が数字(長さの範囲は4〜15)であるかどうかを判断しますか?
私のphp正規表現は正しいですか?
$title = 'c@356920'; //h@907659042423
if (preg_match ("/^[a-h]{1}\@[0-9]{4,15}/i", $title)) {
echo 'ok';
}
ここでゴルフをしている場合は、次のことをお勧めします。
/^[a-h]@\d{4,15}$/i
({1}を削除し、[0-9]を\ dに置き換えました)
一致させる必要があるのがそれだけの場合は、後部アンカー記号($
)を追加する必要があります。したがって、コードをそれから次のように変更する必要があります。
$title = 'c@356920'; //h@907659042423
if (preg_match ("/^[a-h]{1}@[0-9]{4,15}$/i", $title)) {
echo 'ok';
}
@
また、シンボルをエスケープする必要はありません。正規表現は、そのまま、そのシーケンスで始まる任意の文字列と一致しますが、他の量のデータを後で追跡できます(質問から、それがあなたが追跡しているものかどうかはわかりません)。
これまでのところ良さそうですが、2つの小さな変更があります
/^[a-h]{1}@[0-9]{4,15}$/i
@
$
最後に、それ以外の場合は、その後に任意の数の任意の文字を許可するためです(これは「行の終わり」-アンカーです)。