Autor Zpráva
Mufna
Profil
Zdravím Vás. Reguláry nejsou má silná stránka, proto prosím o radu, jak sestavit regulární výraz, který z řetězce (ten může obsahovat libovolné znaky) odstraní 6 vybraných znaků a ničím (!) je nenahradí - ani mezerou.

"Vyříznout" potřebuju těchto 6 znaků: +()/-_
Nox
Profil
Na toto by mělo stačit:
strtr()

---------------------
Ale pokud bys chtěl mermomocí regulár, tak
$string = preg_replace("#[+()/_-]#", "", $string);

pomlčka je na konci schválně, pokud by nešel delimiter #, tak dej / a zdvoj / uprostřed..."+()" se myslím uprostřed regexpu escapovat
nemusí (ikdyž 100% si jistej nejsem), - by mělo být na konci (aby neoznačovalo rozsah)
Mufna
Profil
Nox
Díky
Mufna
Profil
Tak jsem to zprovoznil, ale má to 2 háčky:

1) ještě bych potřeboval ošetřit vyříznutí jakékoliv mezery z řetězce (jde to do DB jako číslo, takže jakákoliv mezera tomu vadí

2) nevím jestli to souvisí s delimiterem, ale když zadám nějaký číslo (jde o zadávání telefonu do formuláře), takže např:

+(420) 444-555-666

tak do DB se dostane úplně jiný číslo, třeba

2147483647

(ve formuláři ale zůstane číslo správně - tj. zde by to bylo 420444555666, kdyby se ještě ošetřila ta mezera)

Na údaj z formuláře používám nějakou takovouhle funkci:
function check_phone($val)
{
  $val = trim($val);
  $val = preg_replace("#[+()/_-]#", "", $val); 
  if (!is_numeric($val)) {
      return false;
    } else {
      return $val;
  }
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: