2016-06-28 5 views
0

Donc, si l'utilisateur tape 1 000,00, il s'agit d'un nombre valide. Que faire si l'utilisateur tape 1,0,000.00.0000,0 Vous voyez theres erreurs multiples ici où vous une valeur ne peut pas être 1,0 ... ou 000,00 car il doit être au moins 3 chiffres après la virgule. Pour l'étendre plus loin, après le point dans un nombre, vous ne pouvez pas avoir une virgule.Vérification de la validité du coma dans une chaîne/un nombre donné en php

$ keyword = $ _POST ['mot-clé'];

if (preg_match('/0/',$keyword) ||preg_match('/1/',$keyword) ||preg_match('/2/',$keyword)||preg_match('/3/',$keyword) ||preg_match('/4/',$keyword) || preg_match('/5/',$keyword) || preg_match('/6/',$keyword) || preg_match('/7/',$keyword) ||preg_match('/8/',$keyword) ||preg_match('/9/',$keyword) ||preg_match('/-/',$keyword) ||preg_match('/+/',$keyword) || preg_match('/,/',$keyword)) { 
$keywordtest = $keyword; 
if ($keyword[0] == '+' || $keyword[0] == '-') 
{ 
    $keywordtest = substr_replace($keyword, '1', 0, 1); 
    echo $keywordtest; 
    } 
if (preg_match('/,/',$keyword)) 
{ 
$x = 0; 
while(true) 
{ 
$findme = ','; 
$pos = strpos($keyword, $findme); 
if ($pos !== false) 
    { 
    $posArray[x] = $pos; 
    $x = x + 1; 
    if (x == 10) 
    break; 
    } 

} 

$numberCheck = posArray[x-1]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

$numberCheck = posArray[x+1]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

$numberCheck = posArray[x+2]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

$numberCheck = posArray[x+3]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

}  



     test_numeric($keywordtest,$keyword); 
     return 0; 
} 

else 
    { 

     echo "false '{$keyword}' is not numeric", PHP_EOL; 

} 
function test_numeric($keywordtest,$keyword) 
{ 
    if (is_numeric($keywordtest)){ 

    echo "true '{$keyword}' is numeric", PHP_EOL; 
    } 
    return 0; 
} 

?>

+0

Ce que je l'ai fait ici est que, je prends + et - et les Covert en nombre et de le transmettre à la fonction is_numeric et retourne les résultats comme vrai ou faux . Cependant comment je testerais si le nombre avant et après la virgule est un nombre valide. J'ai essayé de placer l'emplacement des virgules et de vérifier si les nombres avant et après sont des nombres valides, cependant je pense que c'est la manière la moins efficace de le faire, et ce code ne fonctionne pas –

+0

Pourriez-vous s'il vous plaît formater correctement votre code? – Pete

+0

Quelque chose ne va pas avec le format? J'ai vraiment juste besoin de savoir comment travailler les virgules. Pour prendre la chaîne et vérifier si c'est un nombre valide –

Répondre

2

Vous voulez utiliser filter_var en combinaison avec le FILTER_VALIDATE_FLOAT filter type et le drapeau de FILTER_FLAG_ALLOW_THOUSAND.

Ensuite, il est vraiment simple:

// $val == 100000 
$val = filter_var('100,000.00', FILTER_VALIDATE_FLOAT, array('flags' => FILTER_FLAG_ALLOW_THOUSAND)); 

// $val == -100000 
$val = filter_var('-100,000.00', FILTER_VALIDATE_FLOAT, array('flags' => FILTER_FLAG_ALLOW_THOUSAND)); 

// $val === false (invalid) 
$val = filter_var('100,000.00,00', FILTER_VALIDATE_FLOAT, array('flags' => FILTER_FLAG_ALLOW_THOUSAND)); 
+0

cela fonctionnera-t-il s'ils utilisent d'autres nombres? –

+0

Quels autres numéros? – Pete

+0

disons s'ils mettent 203,221,121.12 comme littéralement n'importe quel nombre possible –