Skip to content

Repository files navigation

SharpInputPlus

.NET License

SharpInputPlus è una libreria .NET ultra-leggera per applicazioni console, ispirata fedelmente a PyInputPlus di Al Sweigart (porting logico-concettuale in C#, non un fork del codice Python).

Fornisce un modo robusto, puramente logico e non grafico per validare l'input dell'utente da terminale, eliminando la necessità di scrivere continui cicli while(true) e blocchi TryParse manuali.


🚀 Perché usare SharpInputPlus?

In C# standard, chiedere un semplice numero intero compreso in un intervallo richiede molto codice ripetitivo (boilerplate).

Prima (C# nativo)

int eta;
while (true)
{
    Console.Write("Inserisci l'età (0-120): ");
    if (int.TryParse(Console.ReadLine(), out eta) && eta >= 0 && eta <= 120)
        break;
    Console.WriteLine("Input non valido. Riprova.");
}

Dopo (con SharpInputPlus)

using SharpInputPlus;
using static SharpInputPlus.Input;

int eta = InputInt("Inserisci l'età: ", min: 0, max: 120);

✨ Funzionalità principali

  • API 1:1 con PyInputPlus: stessi nomi di funzione (InputStr, InputInt, InputFloat, InputBool, InputYesNo, InputChoice, InputMenu, InputEmail, InputNum) e stessi parametri comuni (prompt, defaultValue, blank, limit, timeout, strip, allowRegexes, blockRegexes, applyFunc).
  • Type-safe: ogni funzione ritorna direttamente il tipo richiesto (int, double, bool, string), non una stringa da convertire.
  • Nessuna dipendenza pesante: non altera la grafica del terminale né usa codici ANSI (ideale per log puliti e pipeline di CI/CD).
  • Gestione dei tentativi: il parametro limit limita il numero di inserimenti errati prima di sollevare RetryLimitException (o restituire defaultValue, se impostato).
  • Timeout: il parametro timeout (in secondi) interrompe l'attesa se l'utente impiega troppo tempo, sollevando TimeoutException (o restituendo defaultValue, se impostato).
  • Allow/block list tramite regex: allowRegexes forza l'accettazione di pattern specifici, blockRegexes rifiuta pattern specifici con un messaggio personalizzabile.
  • Trasformazioni personalizzate: applyFunc permette di normalizzare l'input grezzo prima della validazione.

🛠️ Esempi di utilizzo

using SharpInputPlus;
using static SharpInputPlus.Input;

// 1. Validazione di un numero decimale con minimo
double prezzo = InputFloat("Inserisci il prezzo: ", min: 0.99);

// 2. Numero intero compreso in un range, con valore di default dopo troppi tentativi
int eta = InputInt("Inserisci l'età: ", min: 0, max: 120, limit: 3, defaultValue: 18);

// 3. Menu di selezione testuale numerato (ritorna la stringa scelta)
var opzioni = new List<string> { "Pizza", "Pasta", "Insalata" };
string scelta = InputMenu(opzioni, prompt: "Scegli il tuo piatto:", numbered: true);

// 4. Conferma sì/no (ritorna "yes" oppure "no")
string conferma = InputYesNo("Vuoi continuare? ", defaultValue: "yes");

// 5. Gestione avanzata con tentativi massimi (solleva RetryLimitException se non c'è un default)
try
{
    int pin = InputInt("Inserisci il PIN di sicurezza: ", limit: 3);
}
catch (RetryLimitException)
{
    Console.WriteLine("Troppi tentativi errati!");
}

📚 Elenco funzioni

Funzione Ritorna Descrizione
InputStr / InputString string Accetta una stringa generica.
InputNum double Accetta un numero (intero o decimale).
InputInt int Accetta un numero intero. Supporta min, max, greaterThan, lessThan.
InputFloat double Accetta un numero decimale. Supporta min, max, greaterThan, lessThan.
InputBool bool Accetta forme case-insensitive di true/t/false/f.
InputYesNo string Accetta forme case-insensitive di yes/y/no/n, ritorna "yes" o "no".
InputChoice string Accetta uno dei valori in una lista di scelte.
InputMenu string Come InputChoice, ma mostra un menu puntato (*), numerato o lettered.
InputEmail string Accetta un indirizzo email sintatticamente valido.

Parametri comuni

Tutte le funzioni Input* condividono questi parametri opzionali:

  • prompt (string): testo mostrato prima di ogni richiesta.
  • defaultValue: valore restituito se si supera limit o timeout, invece di sollevare un'eccezione.
  • blank (bool): se true, un valore vuoto è accettato come input valido.
  • limit (int?): numero di tentativi concessi prima di arrendersi (RetryLimitException se non c'è defaultValue).
  • timeout (double?): secondi concessi dal primo prompt (TimeoutException se non c'è defaultValue).
  • strip (string): caratteri da rimuovere dall'input (default: spazi bianchi tramite Trim()).
  • allowRegexes (IEnumerable<string>): pattern che, se combaciano, fanno accettare l'input a prescindere da altre regole.
  • blockRegexes (IEnumerable<(string pattern, string message)>): pattern che, se combaciano, fanno rifiutare l'input con un messaggio personalizzato.
  • applyFunc (Func<string, string>): trasformazione applicata all'input grezzo prima della validazione.

⚠️ Eccezioni

  • RetryLimitException: sollevata quando si supera limit senza un defaultValue.
  • TimeoutException: sollevata quando si supera timeout senza un defaultValue.
  • ValidationException: usata internamente per segnalare un input non valido (il messaggio viene stampato a console e la richiesta ripetuta).

📦 Installazione

Installa il pacchetto tramite la CLI di .NET:

dotnet add package SharpInputPlus

Oppure tramite il Package Manager Console di Visual Studio:

Install-Package SharpInputPlus

📄 Licenza

Questo progetto è concesso in licenza sotto i termini della Licenza MIT. Vedi il file LICENSE per i dettagli.

Nota: questo progetto è un porting logico-concettuale di PyInputPlus (sviluppato da Al Sweigart sotto licenza BSD), riscritto da zero in C# — non ne condivide il codice sorgente.

About

Una libreria .NET ultra-leggera per validare l'input da console senza cicli ripetitivi. Ispirata a PyInputPlus per Python.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages