103

クライアント ブラウザによって生成されたUUIDに基づいてバリデータを作成しています。これを使用して、ユーザーが送信する特定のタイプのデータを識別します。UUIDそのクライアントが送信したものが実際に有効なバージョン 4 であることを検証したいと考えていますUUID

このPHP preg_match UUID v4を見つけました。これは近いですが、探しているものとはまったく異なります。文字列が有効でない Sends の場合、is_empty()またはWhereに似たものが存在するかどうかを知りたいです。strtodate()FALSE

正規表現に基づいて行うこともできますが、よりネイティブなものでテストしたいと考えています。

何か案は?

2019 年 11 月 23 日編集:重複タグについては、モデレーターは技術的に正しいですが、この質問は、存在する場合に正規表現する他の何かを fibd することを目的として定式化されました。問題を解決するための異なる回答/アプローチがあり、その回答は一般的によりよく説明されています。これが、この質問を維持する必要があると私が考える理由です

4

5 に答える 5

147

バージョン 4 UUID の形式xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxは、xは任意の 16 進数y89、 、A、またはのいずれかBです。

^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$

小文字を許可するには、i修飾子を使用します →</p>

$UUIDv4 = '/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i';
preg_match($UUIDv4, $value) or die('Not valid UUID');
于 2013-11-14T22:38:03.343 に答える
4

セキュリティのためにのみ必要な場合 (たとえば、JavaScript コードで印刷する必要があり、XSS を回避したい場合) は、ダッシュの位置は実際には問題にならないため、次のようになります。

 /^[a-f0-9\-]{36}$/i

https://regex101.com/r/MDqB2Z/11


(これは v4 に固有のものではありませんが、通常、適切に作成されたアプリケーションは、ダッシュを削除した後にそれらを BINARY(16) として保存します。そのため、何か問題がある場合は、単にオブジェクトが見つからず、404 がスローされます。過剰検証は必要ない場合があります)。

于 2017-06-28T15:13:07.210 に答える