Narzędzia użytkownika

Narzędzia witryny


validacja

To jest stara wersja strony!


Walidacja

Walidacja waluty

W modelu

[['wplata', 'dofinansowanie'], 'match', 'pattern' => '/^\d+(\.\d{1,2})?$/'],

powyższa reguła dopuszcza liczby dodatnie z max 2 miejsca po przecinku

Dodatkowo część całkowita od dziesiętnej powinna być oddzielona kropką. W formularzu należy dopisać kod JavaScript zamieniający przecinek na kropkę w locie

...
<?= $form->field($model, 'wplata', ['addon' => ['append' => ['content' => ' zł.']]])->textInput(['maxlength' => true, 'class' => 'coma']) ?>
<?= $form->field($model, 'dofinansowanie', ['addon' => ['append' => ['content' => ' zł.']]])->textInput(['maxlength' => true, 'class' => 'coma']) ?>
...
 
 
<?php
 
$this->registerJS(<<<JS
 
 $('.coma').on('keyup', function(e){
            $(this).val($(this).val().replace(/[,]/g, '.'));
        });        
JS);

Validacja pola checkbox (wymagane)

 <?= $form->field($model, 'zgoda')->checkbox(['uncheck' => false]) ?> 

Validacja przeciw atakom XSS

Metoda polega na filtrowaniu (validacji) atrybutów modelu przed ich zapisaniem.

W modelu należy dodać funkcję:

    public function beforeValidate() {
        foreach (array_keys($this->getAttributes()) as $attr) {
            if (!empty($this->$attr)) {
                $this->$attr = \yii\helpers\HtmlPurifier::process($this->$attr);
            }
        }
    return parent::beforeValidate();
 
    }
 

HtmlPurifier to klasa, która usuwa z danych podejrzane fragmenty


Rejestracja użytkownika

Reguły walidacji podczas rejestracji użytkownika

public function rules() {
  return [
 
   ['username', 'trim'],
   ['username', 'required', 'message' => 'Login jest wymagany'],
   ['username', 'unique', 'targetClass' => '\common\models\User', 
                'message' => 'Wpisany login jest już zajęty !'],
   ['username', 'string', 'min' => 2, 'max' => 255],
   ['email', 'trim'],
   ['email', 'required', 'message' => 'E-mail jest wymagany'],
   ['email', 'email','message' => 'Błędny adres e-mail'],
   ['email', 'string', 'max' => 255],
   ['email', 'unique', 'targetClass' => '\common\models\User', 
              'message' => 'Wpisany adres e-mail jest już używany w systemie'],
   ['password', 'required', 'message' => 'Musisz wpisać hasło'],
   ['password', 'string', 'min' => 8, 
              'message' => 'Hasło musi mieć minimum 8 znaków'],
   [['password'], 'match', 'pattern' => '/^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/', 
              'message' => 'Hasło musi zawierać, małą i dużą literę oraz cyfrę'],
   ['repassword', 'compare', 'compareAttribute'=>'password', 
              'skipOnEmpty' => false, 
              'message'=>"Hasło i Powtórz hasło nie są identyczne"],
   ['captcha', 'required'],
   ['captcha', 'captcha']
 
     ];
}

Hasło

Walidacja hasła i powtórzenia hasła

public function rules() {
  return [
...
 
  [['password'], 'match', 
    'pattern' => '/^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/', 
    'message' => 'Hasło musi zawierać, małą i dużą literę oraz cyfrę'],
 
  ['repassword', 'compare', 'compareAttribute'=>'password',
    'skipOnEmpty' => false, 
    'message'=>"Hasło i Powtórz hasło nie są identyczne"],
...
  ];
}

Litera, cyfra, spacja, - _ . ,

Litera cyfra spacja, - _ . ,

/^[a-zA-Z0-9.,\-\/\s]+$/

+ polskie znaki

/^[a-zA-Z0-9ąćęłńóśźżĄĘŁŃÓŚŹŻ.,\-\/\s]+$/

Zastosowanie w modelu

public function rules()
    {
      return [
         [['nazwa'], 'required'],
         [['nazwa'], 'string', 'max' => 10],
         [['nazwa'],'match','pattern'=>'/^[a-zA-Z0-9.,\-\/\s]+$/','message'=>'Niedozwolone znaki'],
         [['aktywne'], 'integer'],
       ];
    }

Validacja - unikalne wartości pól

a1 ma być unikalne

['a1', 'unique']

a1 i a2 mają być unikalne razem (obydwa generują błąd)

[['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']]

Warunkowa reguła walidacji

Problem:
pole data w modelu jest wymagane lub nie w zależności od wartości pola typ
jeśli typ == 1 to data jest wymagana a dla innych wartości nie jest.
W modelu:

public function rules() {
return [
    ['data', 
     'required', 
     'when' => function($model) {return $model->typ == 1;},
     'enableClientValidation' => true
    ],
...
]

Validacja dat

Walidacja dat uwzględniająca format oraz kolejność dat od ⇐ do
W modelu:

public function rules(){
return [
...
[['data_od','data_do'], 'date', 'format' => 'php:Y-m-d'],
['data_do', 'compare', 'compareAttribute' => 'data_od', 'operator' => '>=', 'message' => 'Zła kolejność dat' ],
...
]

Unikalny login

Walidacja loginu pod względem jego unikalności

funkcja rules w modelu

 ['username', 'unique', 'message' => 'Ten login jest już zajęty'],

Walidacja hasła

długość min 8 max 16 znaków musi zawierać minimum

1 mała litera 1 duża litera 1 cyfra

W modelu funkcja rules

[['password'], 'string', 'length' => [8, 16]],
[['password'], 'match', 'pattern' => '/^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/', 'message' => 'Hasło musi zawierać, małą i dużą literę oraz cyfrę'],

Walidacja numeru PESEL

function CheckPESEL($str) {
 
        //sprawdzamy czy ciąg ma 11 cyfr
        if (!preg_match('/^[0-9]{11}$/', $str)) { 
            return false;
        }
 
        // tablica z wagami dla liczby kontrolnej
        $wagi = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1]; 
        $sumaKT = 0;
 
        //Obliczamy sumę kontrolną
        for ($i = 0; $i < 11; $i++) {
            $sumaKT += $wagi[$i] * $str[$i]; 
        }
        $reszta = $sumaKT % 10;
        if ($reszta == 0) {
            return true;
        }
        return false;
    }
 

Walidacja 11 cyfr

[['pesel'],'match','pattern'=>'/^[0-9]{11}$/','message'=>'Powinno być 11 cyfr'],
validacja.1703929289.txt.gz · ostatnio zmienione: 2024/09/15 16:22 (edycja zewnętrzna)