Oksana
Oksana

Reputation: 41

Numeric input validation in PHP

I'm trying to validate an input for Account number in php form. It should contain 8 numbers and '-' optionally. If there is '-' - it should be ignored. After pressing the Submit button, the warning message suppose to be displayed above the form in case input is invalid.

Please help.

This is what I got so far, but I'm not sure if this is correct and don't know how to display a warning message above the form.

$acctnum= "$acctnum";

if(empty($acctnum)){
  echo "You did not enter an account number, please re-enter"; }

else if(!preg_match("\-^[0-9]{8}", $acctnum)){
  echo "Your account number can only contain eight numbers. Please re-enter."; }

Thank you!

Upvotes: 0

Views: 258

Answers (3)

yunzen
yunzen

Reputation: 33449

Split the task in two. First get rid of the "-" with str_replace and then check for the numbers.

$match = preg_match("/^\d{8}$/", str_replace("_", "", $str));
if ($match > 0) {
    // Correct
} else {
    // incorrect
}

Upvotes: 0

Shoe
Shoe

Reputation: 76298

Since regex are quite expensive I'd go like that instead:

$acctnum = (int) $acctnum; // this automatically ignore the '-'
if ($acctnum < 0) $acctnum = -$acctnum;
$digits = ($acctnum == 0) ? log10($acctnum) + 1 : 1;
if ($digits === 8) { ... }

Upvotes: 0

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324810

You don't appear to be trying. No documentation or tutorial will tell you to make a Regex like that. For starters, where are the delimiters? Why is - escaped when it's outside a character class and therefore has no special meaning? What is that ^ doing there?

This should do it:

$acctnum = str_replace("-","",$acctnum);
if( !preg_match("/^\d{8}$/",$acctnum)) echo "Error...";

Upvotes: 2

Related Questions