php - preg_match for number error? -
i have form, user must fill in id card number. id number of cards has length of 16 character. want check whether string entered correct number length of 16 characters?
i have code:
<?php $nik=1234567891234567; if(!preg_match('/^[1-9][0-9]{16}$/', $nik)){ echo 'nooooo'; exit; }else{ echo 'yesss'; exit; } ?> the result echoed nooooo, there wrong regex?
the regex problem
what want this:
<?php $nik=1234567891234567; var_dump($nik); if(preg_match('/^[1-9]\d{15}$/', $nik)){ echo "contains numbers"; exit; }else{ echo "contains non-numeric characters"; exit; } this match string 16 characters; first can 1-9, rest can digit. regex, /^[1-9][0-9]{16}$/, matches character in range 1-9, 16 characters in range 0-9, total of 17 characters.
integer size
also, code has logical flaw: number larger maximum integer value on 32-bit system, stated in the documentation. largest value on system can determined checking constant php_int_max. 32-bit system, 2147483647. has fewer 16 characters, code not work reliably on 32-bit system.
strings versus integers
also, post said you're getting info user via form. in case, receiving string, not integer. example, if field named nik, access info $_post['nik'] (for post form) or $_get['nik'] (for form). then, use string; it's not number, anyway.
other considerations
you're checking 16-character number. sounds involving credit cards. if doing credit card processing, should know there major security implications , compliance issues related processing cards on server. can't give legal advice, , how process credit card broad topic site. this: if credit card data, do not want way unless have large budget compliance issues, auditing, , like. should using paypal, stripe, or similar vendor handle this.
Comments
Post a Comment