У меня есть база данных mssql, в которой мои первичные ключи являются идентификаторами GUID. Я работаю над веб-интерфейсом для вставки некоторых данных. Мне нужен GUID, созданный php. Я использую функцию com_create_guid()
. Поэтому, прежде чем пытаться вставить, я хочу убедиться, что мои параметры действительны. Я не могу найти способ проверить, является ли строка (com_create_guid()
возвращает строку) допустимым идентификатором GUID.
Php - проверить действительное руководство
Ответ 1
Рассмотрение 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');
}
Он будет соответствовать
- 8 символов (буквы и цифры)
- 4 символа
- 4 символа
- 4 символа
- 12 символов
Каждый набор символов разделяется символом '-
'
Учитывая, что вы используете com_create_guid
, регулярное выражение проверяет параметры optionnals }
и {
arround 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');
}
Ответ 2
Существует несколько правил, которые должны налагаться на шаблон UUID/GUID.
- Единственными действительными буквами являются a, b, c, d, e и f.
- 0-9 можно заменить символом \d
- GUID часто нечувствительны к регистру.
- У вас либо есть {обе скобки}, либо нет вообще.
Упрощенные шаблоны
- hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh
- {hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh}
Выражение
var_dump(
preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid)
? "ok", "not ok");
Перевод:
- / начало выражения
- ^ начало строки
- (\ {)? необязательная открывающая скобка {
- [a-f\d] {8} 8 шестнадцатеричных символов hhhhhhhh
- (- [a-f\d] {4}) 4 шестнадцатеричных символа продолжаются с помощью dash -hhhh
- {4} предыдущий шаблон повторяется 4 раза
- [a-f\d] {8} 8 шестнадцатеричных символов hhhhhhhh
- (? (1) \}), если появился первый шаблон {, затем сопоставление закрывающего тега}
- $ конец строки
- / закрыть выражение
- i игнорировать чувствительность к регистру