Regex help: проверка поддоменов - PullRequest
1 голос
/ 29 декабря 2010

Эй, у меня есть форма, где человек вводит субдомен, например value.google.com, и запись будет "действительной"

Я хочу запустить проверку регулярных выражений (я ужасно отношусь к регулярным выражениям), которая выполняет следующие действия:

Первый персонаж: не может быть символом Средние символы: a-z, A-Z и символы - и. ТОЛЬКО Последний символ: не может быть символом

Я хочу, чтобы он выдавал false, если он не проходит тест.

Может кто-нибудь помочь мне с этим? Спасибо!

Также, как вы думаете, какие-то другие ограничения должны быть там?

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

Вам нужен класс персонажей.:)

  • [a-zA-Z \ - \.] Будет соответствовать символам типа "a-zA-Z -.".
  • [a-zA-Z]будет соответствовать символам типа «a-zA-Z».
  • ^ означает начало строки
  • $ означает конец строки
  • + означает «один или несколько раз»

Итак, вы ищете: ^ [a-zA-Z] [a-zA-Z \ - \.] + [A-zA-Z] $

И так как вы в PHP можете установить i-flag, он становится нечувствительным к регистру, и этот код должен работать:


  if (preg_match("/^[a-z][a-z\-\.]+[a-z]$/i", "valid.google.com")) {
   echo "A match was found.";
  } else {
   echo "A match was not found.";
  }

Совет: Не следует ли также включать числа?[А-z0-9]

0 голосов
/ 22 августа 2012

Я думаю, что это, вероятно, самая распространенная ситуация.

$subdomain = "usersubdomain";

if(preg_match("/^[A-Z0-9]+$/i", $subdomain)) {
   echo "Valid sub domain";
  }else{
   echo "Not a valid sub domain.";
  }
0 голосов
/ 29 декабря 2010

Если ДВУ всегда com, вы должны иметь возможность:

/^(.*)\.[^.]+\.com$/

Это будет соответствовать тому, что находится перед самым правым . символом (исключая .com).

Однако вместо этого вы можете сделать это с помощью простых строковых операций (strrpos()). Или вы можете разделить на .:

function extract_sub($domain) {
        $parts = explode('.', $domain);

        return implode('.', array_slice($parts, 0, -2));
}

( Демо )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...