2010-04-19 4 views
2

J'ai une fonction que j'utilise en PHP pour travailler avec des nombres. L'intention est de nettoyer le nombre et, éventuellement, de convertir les valeurs nulles à zéro. Il a commencé pour moi pour l'utilisation dans la préparation pour sql, mais est maintenant utilisé dans plus d'endroits. Le voici:PHP Number Cleaner RegEx

function clean_num ($num, $null_to_zero = true) { 
    $num = preg_replace("/[^-0-9.0-9$]/","",$num); 
    if (strlen($num) == 0) 
    $num = ($null_to_zero) ? 0 : null; 
    else if (strlen($num) == 1 && ($num == '-' || $num == '.')) 
    $num = ($null_to_zero) ? 0 : null; 
    return $num; 
} 

Quelqu'un a-t-il des idées sur une façon plus rapide et plus efficace de le faire? Cela fonctionne, l'expression rationnelle est assez simple et devrait couvrir tous les cas dont j'ai besoin, mais ... Une regex diff pourrait faire tout de même sans autre indésirable. Regex n'est pas ma force. Merci!

+0

Que voulez-vous dire, "nettoyer le numéro"? Est-ce que '$ num' est une chaîne ici? – Thomas

+0

quel est le dollar pour dans l'expression rationnelle? –

+1

@Tom Haigh, on dirait qu'il essaie de nettoyer les devises. Blanchisseur d'argent! –

Répondre

3

Le regex [^-0-9.0-9$] correspond à tout ombles qui est

  • pas un trait d'union
  • pas un chiffre
  • pas .
  • pas $

il n'y a pas besoin de avoir deux 0-9 dans la classe char, donc efficacement votre regex est: [^-0-9.$] ou [^-\d.$]

+0

Supprimer le $ de l'expression régulière m'a donné les résultats exacts que je voulais. Juste des chiffres, ne perdez aucune précision, ne perdez pas de négatif, dépouillez tout alpha, etc. Merci! – Erick