我有一个mssql数据库,其中我的主键是GUID。我正在使用Web界面插入一些数据。我需要一个由php生成的GUID。我正在使用com_create_guid()
函数。因此,在尝试插入之前,我想确保我的参数有效。我找不到一种方法来检查字符串(com_create_guid()
返回字符串)是否是有效的GUID。
答案 0 :(得分:37)
应该对UUID / GUID模式强加一些规则。
简化模式
表达式:
var_dump(
preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid)
? "ok", "not ok");
翻译:
答案 1 :(得分:31)
考虑GUID定义如下:“A98C5A1E-A742-4808-96FA-6F409E799937”(来自维基百科页面所示)
我想使用像这样的正则表达式:
$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');
}
匹配
每组字符由“-
”
考虑到您正在使用com_create_guid
,对guid进行选项}
和{
的正则表达式检查,这意味着它也会显示'ok':
$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');
}