Sto cercando di creare un modello RegEx
[a-zA_Z]
Ho creato questo modello:
^(?=.*[0-9].*[0-9])[0-9a-zA-Z]{8}$
Questo modello funziona bene ma voglio solo una cifra consentita. Esempio:
aaaaaaa6 match aaa7aaaa match aaa88aaa don't match aaa884aa don't match aaawwaaa don't match
Potresti invece usare:
^(?=[0-9a-zA-Z]{8})[^\d]*\d[^\d]*$
La prima parte affermerebbe che la corrispondenza contiene 8 alfabeti o cifre. Una volta assicurato, la seconda parte assicura che ci sia solo una cifra nella partita.
EDIT: Spiegazione:
^
e $
indicano l’inizio e la fine della stringa. (?=[0-9a-zA-Z]{8})
asserisce che la corrispondenza contiene 8 alfabeti o cifre. [^\d]*\d[^\d]*
implicherebbe che ci sia un carattere di una sola cifra e caratteri non numerici rimanenti. Poiché avevamo già affermato che l’input contiene cifre o alfabeti, i caratteri non numerici qui sono alfabeti. Se vuoi una soluzione non regex, l’ho scritta per un piccolo progetto:
public static bool ContainsOneDigit(string s) { if (String.IsNullOrWhiteSpace(s) || s.Length != 8) return false; int nb = 0; foreach (char c in s) { if (!Char.IsLetterOrDigit(c)) return false; if (c >= '0' && c <= '9') // just thought, I could use Char.IsDigit() here ... nb++; } return nb == 1; }