• Как проверить строку по маске?

    27cm
    @27cm
    TODO: Написать статус
    Можно конечно как-то наговнокодить, пытаться сгенерировать регулярку, потом ее подставлять, но интересует красивый и быстрый способ

    А можно не наговнокодить, а красиво и быстро сгенерировать регулярку из маски.
    ideone.com/YY4Yhh
    $mask = 'X-XX-XX-XXXXX';
    $test = '7-Ds-re-SD434';
    
    $pattern = preg_replace_callback('/X+/', function ($m) { 
        return '[^-]{' . strlen($m[0]) . '}'; 
    }, preg_quote($mask));
    
    if (preg_match("/^{$pattern}$/", $test)) {
    	echo "Строка '$test' подходит под маску '$mask'"; 
    }


    Но есть вариант и проще:
    ideone.com/GiwMAY
    $mask = 'X-XX-XX-XXXXX';
    $test = '7-Ds-re-SD434';
    
    if (preg_replace('/[^-]/', 'X', $test) == $mask) {
        echo "Строка '$test' подходит под маску '$mask'"; 
    }
    Ответ написан
    Комментировать
  • Как получить статистику кликов "своих" кнопок социальных сетей?

    pingo
    @pingo
    собрал на jsfiddle быстренько, глянь jsfiddle.net/m6zKg/2
    шара тоже должна работать
    Ответ написан
    1 комментарий
  • Необходимо ли писать дополнительные методы в модели, чтобы вытаскивать некоторые данные?

    nowm
    @nowm
    Если вы уже до этого получали все данные пользователя из БД, то лучше просто возвращать эти данные из свойств UserController. Да, метод отдельный не помешает, но не обязательно генерировать запрос к БД.

    Например, если вы уже подгружали пользовательские данные раньше и сохраняли их куда-нибудь вроде $this->_model:

    class UserController extends Controller {
      var $_model;
    
      public function loadModel($id) {
        $this->_model = User::model()->findByPk($id);
    
       // ...
    
        return $this->_model;
      }
    
      // ...
    
      public function getBirthday($id) {
        if (isset($this->_model->date) && $this->_model->user_id == $id) {
          return $this->_model->date;
        } else {
          $criteria = new CDbCriteria;
          $criteria->select = 'date';
          $data = User::model()->findById($id,$criteria);
          return $data !== null $data->date : null;
        }
      }
    
      // ...
    
    }


    Новый запрос к БД нужно составлять только в том случае, когда, например, вам нужно получить все комментарии конкретного пользователя из этого контроллера, потому что в такой ситуации потребуется новая размерность и новый запрос к БД. А для получения отдельных полей из одной записи лучше один раз получить все данные, хранить их в свойстве контроллера, а потом просто возвращать из памяти, а не генерировать каждый раз новый запрос к БД.

    Ваш подход, в принципе, не особенно сильно повлияет на работу сайта — подумаешь, один лишний запрос к БД. Но, вообще, такой подход — неправильный. Тут один лишний запрос, там один лишний запрос. Они в итоге собираются в кучу лишнего потребления ресурсов.
    Ответ написан
    2 комментария