Подтвердить что ты не робот

Php - проверить действительное руководство

У меня есть база данных mssql, в которой мои первичные ключи являются идентификаторами GUID. Я работаю над веб-интерфейсом для вставки некоторых данных. Мне нужен GUID, созданный php. Я использую функцию com_create_guid(). Поэтому, прежде чем пытаться вставить, я хочу убедиться, что мои параметры действительны. Я не могу найти способ проверить, является ли строка (com_create_guid() возвращает строку) допустимым идентификатором GUID.

4b9b3361

Ответ 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 игнорировать чувствительность к регистру