Как проверить URL для .рф?

Тема в разделе "Регулярные выражения", создана пользователем iskif, 3 янв 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    Добрый день
    с регулярными выражениями дела раньше не имел, но вопрос кажется из этого раздела :)

    В скрипте-каталоге при заполнении информации об организации есть поле "сайт". И разработчиками уже поставлена проверка на правильность заполнения (которую можно изменить)
    Код:
    ^[a-z0-9_-]+\.+[a-z0-9_-]
    Но эта конструкция, естественно, считает все домены на кириллице не допустимыми :(
    как исправить это "недоразумение"?
     
  2. VandJ

    VandJ

    Регистр.:
    8 апр 2008
    Сообщения:
    319
    Симпатии:
    115
    Код:
    ^[a-zа-я0-9_-]+\.+[a-zа-я0-9_-]
     
    iskif нравится это.
  3. nagual

    nagual Постоялец

    Регистр.:
    17 фев 2009
    Сообщения:
    65
    Симпатии:
    3
    Зачем делать [a-zа-я0-9_-] если есть \w\d ?
     
  4. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    пример можно? что вставить в поле
    Regex pattern for input validation:

    ^[\w\d]+\.+[\w\d]
    ^\w\d+\.+\w\d
    не помогло

    сейчас там ^[a-zа-я0-9_-]+\.+[a-zа-я0-9_-]
    но это работает только если вводить url с www
    www.сайт.рф - принимает
    просто сайт.рф - ошибка
    сейчас столкнулся при добавлении, хотя, когда сразу проверял, вроде работало и так и так :nezn:
     
  5. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    PHP:
     '/^([a-zа-я0-9]+(-[a-zа-я0-9]+)*\.)+[a-zа-я]{2,}/' 
     
  6. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    нет, теперь хоть с www, хоть без и на латинице если, то всегда получаю ошибку
    "Введите правильное значение для Сайт"

    если убрать в начале и в конце '/ то на латинице принимает нормально, с www и без
    на кириллице не хочет

    первоначальная конструкция ^[a-zа-я0-9_-]+\.+[a-zа-я0-9_-] принимает домены на латинице тоже и с www и без
     
  7. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    регулярка правельная может тогда выложи кусок кода куда вставляешь? и как?
    судя по тому что вы раньше писали вам надо вставлять только это ^([a-zа-я0-9]+(-[a-zа-я0-9]+)*\.)+[a-zа-я]{2,}
     
  8. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    так тоже пробовал, добавил предыдущее сообщение.
    а с куском кода сложнее, говорю ж - готовый скрипт каталога организаций, при заполнении в нём есть поле "Сайт" и где он там потом проверяется не знаю.
    попробую сейчас поискать

    вот что нашёл
    в файле шаблона, где админ может изменить это выражение
    Код:
    case 'website':
                    ?>
                    <table class="admin_list">
                        <tr>
                            <td>
                                <strong>Regex pattern for input validation:</strong>
                                <br /><input id="params[valid_regex]" name="data[Field][params][valid_regex]" type="text" size="150" value="<?php $this->regex()?>" />
                            </td>
    .
    .
    .
    
    единственное упоминание о valid_regex в других файлах такое:
    Код:
                        if(!isset($field['Field']['_params']['valid_regex'])) {
    
                            switch($field['Field']['type']) {
                               ... 
                                case 'website':
                                    $regex = "^(ftp|http|https)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]";
                                    break;
                                case 'email':
                                    $regex = ".+@.*";
                                    break;
                                default:
                                    $regex = '';
                                    break;
                            }
      
    но тут прописано жёстко, как и было изначально
    значение, которое задаю я (а оно действительно по разному работает), берётся из БД похоже, но где и каким образом ...

    я вот не пойму, почему при конструкции ^[a-zа-я0-9_-]+\.+[a-zа-я0-9_-] сайты на латинице можно вводить и с www и без, а на кириллице только с www или ввв, ну из трёх частей чтоб состояло обязательно???
     
  9. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    вот так нижний код попробуй сделать
    PHP:
    if(!isset($field['Field']['_params']['valid_regex'])) {
                            switch(
    $field['Field']['type']) {
                               ... 
                                case 
    'website':
                                    
    $regex "^(ftp|http|https)+(:\/\/)+([a-zа-я0-9]+(-[a-zа-я0-9]+)*\.)+[a-zа-я]{2,}";
                                    break;
                                case 
    'email':
                                    
    $regex ".+@.*";
                                    break;
                                default:
                                    
    $regex '';
                                    break;
                            }
    а это выражение вообще в корне не правильно ^[a-zа-я0-9_-]+\.+[a-zа-я0-9_-] где вы видели нижнее подчеркивание в урле? это для емайл подойдет
     
  10. iskif

    iskif

    Регистр.:
    21 авг 2006
    Сообщения:
    325
    Симпатии:
    35
    пробовал, не помогло
    я вобще не пойму смысла этого кода - то выражение, которое я задаю в админке, в этот файл не прописывается, но работает, т.е. хранится или в БД или в каком то другом файле. Разве что осталось с каких-то первых версий, когда изменение не было вынесено в админку.

    попробую спросить у разработчика, если получится с моим вариантом лицензии :-]
     
Статус темы:
Закрыта.