Username la inregistrare
Last Updated: Dec 10 2023 11:35, Started by
phpguru
, Dec 09 2023 20:36
·
1
#1
Posted 09 December 2023 - 20:36
Salut,
Vreau sa fac pt. inregistrarea unui username urmatoarele: - Minim 4 si maxim 15 caractere care sa includa (obligatoriu: litere si optional: 0-9 _ . ) - Optional sa fie: minim 1 si maxim 4 numere - Optional maxim: 1 _ (underscore) - Optional maxim: 1 . (punct) Variantele mele: VARIANTA 1: if ( preg_match( "/^[a-zA-Z]{4,15}(\d{1,4})?_?\.?$/", $nickname ) ) { return true; } VARIANTA 2: if ( preg_match( "/^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d_\.]{4,15}(?:\d{1,4})?_?\.?$/", $nickname ) ) { return true; } Problema este ca depaseste maxim 4 numere, alteori ma obliga sa adaug cel putin 1 numar sau _ . Edited by phpguru, 09 December 2023 - 20:38. |
#2
Posted 09 December 2023 - 20:50
Doua variante: daca problema e de expresii regulare, nu e PHP si, probabil, mai potrivit sa mergi pe alta arie. Daca problema e de PHP, atunci scrie o functie de validare care sa verifice toate conditiile pe care le ai.
Edited by gogu1905, 09 December 2023 - 20:50. |
#3
Posted 09 December 2023 - 20:52
Am scris la functii de validare de mi-a venit rau. Nu reusesc sa fac exact ca-n conditiile de mai sus.
|
#4
Posted 09 December 2023 - 21:03
Ce vrea sa zica colegul e ca expresiile nu sunt PHP, ele sunt integrate in PHP. Trebuie sa gasesti in specialist in expresii nu in PHP.
Edited by MooF2010, 09 December 2023 - 21:03. |
#5
Posted 09 December 2023 - 22:10
^(?=.*[a-zA-Z])[a-zA-Z0-9_.]{4,15}(?:\d{1,4})?(?:_?\.?)?$Posibil sa te ajute chatgpt pentru regex. Explicații pentru fiecare parte a expresiei: ^: Ancorează începutul șirului. (?=.*[a-zA-Z]): Asigură că există cel puțin o literă în șir. [a-zA-Z0-9_.]{4,15}: Potrivește litere, cifre, underscore și puncte, cu lungimea între 4 și 15 caractere. (?:\d{1,4})?: Face ca grupul de cifre să fie opțional, dar, dacă există, să fie între 1 și 4 cifre. (?:_?\.?)?: Face ca underscore și punctul să fie opționale, dar, dacă există, să fie maximum un underscore și maximum un punct. $: Ancorează sfârșitul șirulu. Deci: if ( preg_match( "/^(?=.*[a-zA-Z])[a-zA-Z0-9_.]{4,15}(?:\d{1,4})?(?:_?\.?)?$/", $nickname ) ) { return true; } Edited by iulian_1976, 09 December 2023 - 22:12. |
#6
Posted 10 December 2023 - 00:30
Expresia regulata de mai sus nu mi se pare corecta, dar reprezinta un punct de plecare. Deficiente (din examinarea expresiei, fara a o fi testat, deci posibil sa ma si insel):
Edited by sags, 10 December 2023 - 00:31. |
#7
Posted 10 December 2023 - 02:06
N-as folosi regex pentru asa ceva. Cateva if-uri si numarat tipuri de caractere.
|
#8
Posted 10 December 2023 - 06:07
Dacă ții neapărat să folosești regex, o soluție este să creezi o funcție în care:
|
#9
Posted 10 December 2023 - 11:35
$username = "abd123da._"; $len = strlen($username); $letters = 0; $digits = 0; $underscore = 0; $dot = 0; foreach (str_split($username) as $c) { if (preg_match('/[a-zA-Z]/', $c)) $letters++; if (preg_match('/[0-9]/', $c)) $digits++; if ($c == '_') $underscore++; if ($c == '.') $dot++; } $is_valid = ($len >= 4 && $len <= 15) && ($letters > 0) && ($digits >= 1 && $digits <= 4) && ($underscore <= 1) && ($dot <= 1); |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users