単一の文字の一致は、試みたものと同様に、文字クラスで実行できます。
[a-zA-Z0-9\-&'./]
次に、これらの文字の後に追加することにより、これらの文字の 1 つ以上の任意の数が存在できることを指定します+
。しかし、255 文字を超えてはならないことを検証したいので、明示的な量指定子を使用してこれを行うこともできます{0,255}
。0 から 255 までの任意の長さを許可します。ハイフンはエスケープされることに注意してください。文字クラス。i
修飾子を使用してパターンの大文字と小文字を区別しないようにすることで、これを少し簡単にすることができます。
単一のスペースを一致させる要件はもう少し複雑です。これを行う方法はいくつかありますが、これらを単一のスペースに正規化したいとも言っているので、最初にこれを実行して、追加できるようにすることをお勧めします簡単にするために、スペースを文字クラスに追加します。これは、別の正規表現を使用して簡単に実行できます。
/ +/
これは、1 つ以上のスペース文字のすべてのブロックに一致するため、すべての一致を 1 つのスペースに置き換えるだけです。
文字列に含まれるスペースが 1 つだけであることがわかったので、件名の開始と終了のアサーションを使用^
して、文字列全体にリスト内の文字のみが含まれていることを簡単に確認できます。$
したがって、すべてをまとめると、次のようになります。
// Replace all space blocks to a single space
$normalizedSpace = preg_replace('# +#', ' ', $input);
// Validate the input contains only the chars you want
if (!preg_match('#^[a-z0-9\-&\'./ ]{0,255}$#i', $normalizedSpace)) {
// Data invalid, handle error here
} else {
// If you get here the data is valid
$validData = trim($normalizedSpace);
}
trim()
そうではないかもしれませんが、データも同様に必要になると思います。