preg_match для проверки URL-слаг - PullRequest
6 голосов
/ 13 января 2012

Я разрешаю пользователю создавать собственный профиль на моем сайте, чтобы он мог выбирать, каким будет его URL. Так, например, если их зовут Джон Смит, они могут ввести john-smith, и тогда URL их профиля будет www.mysite.com/john-smith.

.

Мне нужно использовать preg_match, чтобы проверить, что они вводят действительный URL-адрес. Итак, вот правила, которым он должен соответствовать, чтобы быть действительным:

он должен содержать хотя бы одну букву и может содержать только буквы, цифры и дефисы

Может кто-нибудь помочь мне, пожалуйста, я хорошо разбираюсь в PHP, но чушь с регулярным выражением!

Ответы [ 3 ]

14 голосов
/ 13 января 2012

Надеюсь, этот код не требует пояснений:

<?php

function test_username($username){
    if(preg_match('/^[a-z][-a-z0-9]*$/', $username)){
        echo "$username matches!\n";
    } else {
        echo "$username does not match!\n";
    }
}

test_username("user-n4me");
test_username("user+inv@lid")

Но если нет, функция test_username () проверяет свой аргумент на соответствие шаблону:

  • начинается (^) ...
  • с одной буквой ([a-z]) ...
  • , за которым следует любое количество букв, цифр или дефисов ([-a-z0-9]*) ...
  • и после этого ничего не имеет ($).
3 голосов
/ 07 августа 2016

Лучшее решение:

function is_slug($str) {
    return preg_match('/^[a-z0-9](-?[a-z0-9]+)$/i', $str);
}

Тесты:

  • fail: -user-name
  • fail: user-name
  • ошибка: имя пользователя-
  • действительный: имя пользователя
  • действительный: user123-name-321
  • действительный: имя пользователя
  • действительный: USER123-имя
  • Действителен: user-name-2

Наслаждайтесь!

1 голос
/ 13 января 2012

Довольно просто, если мы предположим, что первый символ должен быть буквой ...

/[a-z]{1}[a-z0-9\-]*/i
...