I have a mssql database in which my primary keys are GUIDs. I am working on a web interface for inserting some data. I need a GUID, generated by php. I am using com_create_guid()
function. So, before trying to insert I want to ensure that my parameters are valid. I can not find a way to check if a string(com_create_guid()
returns string) is a valid GUID.
A GUID (in hex form) need not contain any alpha characters, though by chance it probably would. If you are targeting a GUID in hex form, you can check that the string is 32-characters long (after stripping dashes and curly brackets) and has only letters A-F and numbers.
The valid GUID (Globally Unique Identifier) must specify the following conditions: It should be a 128-bit number. It should be 36 characters (32 hexadecimal characters and 4 hyphens) long. It should be displayed in five groups separated by hyphens (-).
Description ¶ com_create_guid(): string|false. Generates a Globally Unique Identifier (GUID). A GUID is generated in the same way as DCE UUID's, except that the Microsoft convention is to enclose a GUID in curly braces.
Theoretically you can display each byte as an extended ASCII character (255 characters), which would allow you to save a GUID as a 16 character length string.
There are a few rules that should be imposed on the UUID/GUID pattern.
Simplified patterns
Expression:
var_dump( preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid) ? "ok", "not ok");
Translation:
Considering a GUID is defined as something like this : "A98C5A1E-A742-4808-96FA-6F409E799937" (from what the wikipedia page says)
I suppose using a regex like this one would do :
$guid = 'A98C5A1E-A742-4808-96FA-6F409E799937'; if (preg_match('/^\{?[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\}?$/', $guid)) { var_dump('ok'); } else { var_dump('not ok'); }
It will match for
Each set of characters being separated by a '-
'
Considering you're using com_create_guid
, the regex check for optionnals }
and {
arround the guid, which means this would display 'ok' too :
$guid = '{A98C5A1E-A742-4808-96FA-6F409E799937}'; if (preg_match('/^\{?[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\}?$/', $guid)) { var_dump('ok'); } else { var_dump('not ok'); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With