私はすでに作業用コードを持っていますが、もし可能ならばなぜ機能するのかを説明する人が必要です!英数字、カンマ、ハイフン、アンダースコア、およびセミコロンのみを許可するRegex
az、AZ、0-9、コンマ、セミコロン、アンダースコア、またはハイフン(最終的には単一のユーザ名を表すはずです)の文字列をPHPで置換しています。ユーザー名のコンマ/セミコロン区切りリスト)。
次作品:
$data = preg_replace('/[^,;a-zA-Z0-9_-]/s', '', $data);
しかし、次はしていません:
$data = preg_replace('/[^a-zA-Z0-9_-,;]/s', '', $data);
なぜでしょうカンマやセミコロンは開始時にあるこののみ動作しますか?それらを最後に置くと事態が悪化するようです(これは/ [^ a-zA-Z0-9 _-]/sに出会ったときに最初に試したものです)
脇に、任意の末尾セミコロン(複数)またはカンマ(複数)をトリミングして、誰かがこれを行うには、より効率的かつ/またはエレガントな方法を提案することができるかもしれすることは任意の助け
if(preg_match('/;$/', $data))
{
$data = rtrim($data, ';');
}
if(preg_match('/,$/', $data))
{
$data = rtrim($data, ',');
}
感謝:)
_ '〜'、 '' _:非常に明確な進展があります。これはUnicodeテーブルに基づいています。しかし、この場合、 '_'はUnicodeテーブルの_after_'、 'になります。そのため、範囲指定はできません。 – Xufox
@Xufox - それはそれを回帰にしてくれるでしょうか? ;)ポイントは、正規表現エンジンが理解する進歩はないということです。しかし、あなたは正しく、[他の方向への有効な進展があることは明らかです(http://rextester.com/YGC93292)、 '、'から '_ 'になります。私は今までそれを知らなかった、ありがとう! –