2017-08-20 1 views
-2

Ich habe ein Formular, wo der Benutzer seine ID-Nummer eingeben muss. ID Anzahl der Karten hat eine Länge von 16 Zeichen. Ich möchte überprüfen, ob die eingegebene Zeichenfolge nur eine Nummer mit einer Länge von 16 Zeichen korrekt ist?preg_match für Anzahl Fehler?

ich habe diesen Code:

<?php 
$nik=1234567891234567; 

if(!preg_match('/^[1-9][0-9]{16}$/', $nik)){ 
    echo 'nooooo'; 
    exit; 
}else{ 
    echo 'yesss'; 
    exit; 
} 
?> 

das Ergebnis nooooo Echo wird, ist es etwas falsch mit seiner regex?

+0

'/^[0-9] + $ /' ist der eine. – tilz0R

+0

@ tilz0R das ist falsch. Was ist mit '10'? Es ist eine Ganzzahl, aber Ihre Regex würde es ablehnen. –

+0

@ EdCottrell, also wie kann ich es mit preg_match überprüfen? Ich habe meine Frage aktualisiert – Gumilar

Antwort

1

Die Regex Problem

Was Sie wollen, ist so etwas wie dieses:

<?php 
$nik=1234567891234567; 

var_dump($nik); 

if(preg_match('/^[1-9]\d{15}$/', $nik)){ 
    echo "Contains only numbers"; 
    exit; 
}else{ 
    echo "Contains non-numeric characters"; 
    exit; 
} 

Here's a demo.

Dies entspricht einer Zeichenfolge mit genau 16 Zeichen; der erste kann 1-9 sein, aber der Rest kann jede Ziffer sein. Ihre Regex, /^[1-9][0-9]{16}$/, entspricht einem Zeichen im Bereich 1-9, dann 16 Zeichen im Bereich 0-9, für insgesamt 17 Zeichen.

Integer Größe

Auch hat den Code einen logischen Fehler: Ihre Zahl ist größer als der maximale Integer-Wert auf einem System 32-Bit, wie in the documentation angegeben. Der größte Wert eines Systems kann durch Überprüfen der Konstante PHP_INT_MAX ermittelt werden. Für ein 32-Bit-System ist dies 2147483647. Das hat weniger als 16 Zeichen, so dass Ihr Code auf einem 32-Bit-System nicht zuverlässig funktioniert.

Strings Versus Integers

Auch Ihre Post sagte Sie diese Informationen über ein Formular von einem Benutzer fühlt. In diesem Fall erhalten Sie eine Zeichenfolge, keine Ganzzahl. Beispiel: Wenn Ihr Feld den Namen nik hat, würden Sie auf die Informationen mit $_POST['nik'] (für ein POST-Formular) oder $_GET['nik'] (für ein GET-Formular) zugreifen. Dann benutze es einfach als String. es ist sowieso nicht wirklich eine Nummer.

Andere Überlegungen

Sie Überprüfung für eine 16-stellige Zahl. Das klingt nach etwas mit Kreditkarten. Wenn Sie die Kreditkartenverarbeitung mit durchführen, sollten Sie wissen, dass es erhebliche Auswirkungen auf die Sicherheit und die Einhaltung von Vorschriften in Bezug auf die Verarbeitung von Karten auf Ihrem Server gibt. Ich kann Ihnen keinen rechtlichen Rat geben, und wie man eine Kreditkarte richtig verarbeitet, ist ein viel zu weites Thema für diese Seite. Aber ich werde dies sagen: Wenn das ist Kreditkarten-Daten, Sie nicht wollen es auf diese Weise tun, es sei denn, Sie haben ein sehr großes Budget für Compliance-Probleme, Auditing und dergleichen. Sie sollten sich mit PayPal, Stripe oder einem ähnlichen Anbieter beschäftigen.

+0

Vielen Dank für Ihre Erklärungen.Ich überprüfe 16 Zeichen Nummer ist für Personalausweis, in meinem Land ist seine Länge 16 Zeichen. Ja, ich greife auf die Info mit $ _POST ['nik'] zu und es gab mir einen String-Wert, und dank Ihrer Antwort löste ich wirklich mein Problem, aber kann ich wirklich überprüfen, dass der String-Wert nur Zahlen und nicht Alphabet enthält oder irgendwelche besonderen Zeichen? und was ist der Unterschied zwischen 1234567890 als String und 1234567890 als Nummer? – Gumilar