Я хочу отфильтровать вводимые пользователем данные из формы, все переменные настроены правильно. Regex не работает только в последнем случае, когда я сравниваю дополнительные свойства продукта, размер, вес или размеры. И только параметр размера фильтруется правильно, другие просто игнорируются, потому что я могу добавить что угодно к весу и размерам, а регулярное выражение примет это. Например:
Test input:
Size: aaaa // Does not let through
Weight: aaaa // Lets through
Dimensions: aaaa // Lets through
В последнем if есть OR в коде, потому что только один параметр является обязательным для отправки.
Вот код, отвечающий за регулярное выражение:
if(!empty($UI->sku) && !empty($UI->name) && !empty($UI->price)) {
if(!empty($UI->size) || !empty($UI->weight) || !empty($UI->dimensions)) {
if(preg_match("/^\d+$/" , $UI->sku)) { // Checking if sku is int
if(preg_match("/^[a-zA-Z0-9 ]+$/" , $UI->name)) { // Checking if name consists only of numbers and letters
if(preg_match("/^(?=.)([+-]?([0-9]*)(\.([0-9]+))?)$/" , $UI->price)) { // Checking if price is float or int
if(preg_match("/^[0-9]*$/" , $UI->size) || preg_match("/^(?=.)([+-]?([0-9]*)(\.([0-9]+))?)$/" , $UI->weight) || preg_match("/^[0-9]+x[0-9]+x[0-9]+$/" , $UI->dimensions)) {
//Checking additional product parameters for valid format
$UI->addToDatabase();
} else {
echo "Check your product's additional property!";
exit;
}
} else {
echo "Check your product's price!";
exit;
}
} else {
echo "Check your product's name!";
exit;
}
} else {
echo "Check your product's SKU!";
exit;
}
} else {
echo "Please add additional parameter to your product!";
exit;
}
} else{
echo "Please, include all the product's parameters!";
}