правильное регулярное выражение для поддоменов - PullRequest
2 голосов
/ 25 апреля 2011

У меня есть веб-приложение, в котором люди регистрируются и получают поддомен под этим доменом приложения (xx.app.com) ... для каждого поддомена есть БД, которая прикреплена к нему грамматически и имеет то же имя, что иподдомен.

мне нужно правильное регулярное выражение, которое работает с поддоменом и, конечно же, с именем db (mysql, если оно имеет значение), оно должно быть в нижнем регистре с длиной от 6 до 20 и единственным допустимым символомэто "-", также цифры запрещены ...

я пробовал много раз, но всегда плохо, некоторые вроде: / ([az -]) {6,20} /

Заранее спасибо:)

Ответы [ 4 ]

2 голосов
/ 25 апреля 2011

Возможно, для этого есть правильное регулярное выражение, но оно не подходит для этого.

Попробуйте parse_url

Edit:

Я не уверен, как вы его используете. Если вы обрабатываете только часть субдомена, должно работать следующее и не совпадать номера:

^[a-z-]{6,20}$

Это гарантирует, что субдомен имеет только от a до z и - и от 6 до 20 раз. ^ Соответствует началу строки, а $ соответствует концу.

Причина, по которой раннее регулярное выражение принимало числа или что-то еще, заключалась в том, что само совпадение было бы частью строки. Теперь с ^ и $ вы гарантируете, что это вся строка.

1 голос
/ 25 апреля 2011

Это было бы более безопасное регулярное выражение, так как поддомен не может начинаться с дефиса:

^[a-z][a-z-]{5,19}$

Что касается имени базы данных, я считаю, что оно не может содержать дефис, поскольку оно является оператором вычитания, поэтому вашим лучшим выбором может быть либо запретить переносы, либо заменить их на подчеркивания:

$database = str_replace('-', '_', $subdomain);

РЕДАКТИРОВАТЬ : Очевидно, @nikic прав, вы можете использовать дефисы, если вы указали обратное имя базы данных.

0 голосов
/ 25 апреля 2011

Для этого вам понадобится регулярное выражение для положительного взгляда . Попробуйте следующий код:

<?php
   $a = array("xx-yyy.domain.cam", "xx4yyy.domain.cam", "abcde.domain.com", "my-sub-domain.domain.org");
   foreach ($a as $v) {
      echo "For domain $v: ";
      preg_match('/^(?:[-a-z]{6,20})(?=\.)/', $v, $m );
      if (count($m) > 0)
         echo( "subdomain: " . $m[0] . "\n");
      else
         echo "subdomain not matched\n";
   }
?>

В основном совпадают комбинации букв нижнего регистра и дефиса - символов длиной от 6 до 20 символов до появления первой точки . символов.

- Дефис не должен быть экранирован, если используется в начале в квадратных скобках.

OUTPUT

For domain xx-yyy.domain.cam: subdomain: xx-yyy
For domain xx4yyy.domain.cam: subdomain not matched
For domain abcde.domain.com: subdomain not matched
For domain my-sub-domain.domain.org: subdomain: my-sub-domain
0 голосов
/ 25 апреля 2011

Вы пытались избежать дефиса?

/([a-z\-]){6,20}/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...