-
-
Save Joel-James/3a6201861f12a7acf4f2 to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* Check if a given string is a valid UUID | |
* | |
* @param string $uuid The string to check | |
* @return boolean | |
*/ | |
function isValidUuid( $uuid ) { | |
if (!is_string($uuid) || (preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', $uuid) !== 1)) { | |
return false; | |
} | |
return true; | |
} |
@ellisgl method works just fine. Less overhead.
Just another way to write it. Would be interesting to come up with a way to bench mark mupliple regexs...
@ellisgl I actually wanted to mention your method works better lol :)
I ran both 10K times in PHP 7.3.10 //=> 22% faster than the first one.
Wow, I didn't expect that!
@ellisgl's method can give the false positive answer.
If you look at https://tools.ietf.org/html/rfc4122#section-4.1 you can find that not every 128-bits sequence represented in string with hyphens in right places is valid UUID.
@sivolobov should match hex string of 8, 4, 4, 4, 12...
Why not just return (preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', $uuid) === 1);
It's return false isn't a string and the string need to be a UUID.
This means less processing even if it's just a few cycles.
Could leave the '=== 1' off too.
@ellisgl without comparing don't have a Boolean return.
preg_match returns 0, 1, false
Ah, that's right.. ugh.
Thank you ellisgl. Your method works perfectly for me.
@impressto You're welcome.
/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i
@ellisgl works wonderfully - thank you
@cakebake You're welcome.
great gist, I come up with this
return $uuid && preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', $uuid);
/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i
Excelent!! It works fine.
Perfect!
Updated based on @ellisgl suggestion
🤩
One line :)
/**
* Check if a given string is a valid UUID
*
* @param mixed $uuid The string to check
* @return boolean
*/
function isValidUuid(mixed $uuid): bool
{
return is_string($uuid) && preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', $uuid);
}
/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i