Fare in modo che l’espressione regolare non corrisponda alla stringa vuota?

Ho un’espressione regolare che funziona bene nella mia applicazione, ma corrisponde anche a una stringa vuota, ovvero non si verifica alcun errore quando l’input è vuoto. Come modifico questo regex in modo che non corrisponda a una stringa vuota? Si noti che NON voglio modificare alcuna altra funzionalità di questa espressione regolare.

Questa è la regex che sto usando: ^([0-9\(\)\/\+ \-]*)$

Io non conosco molto sulla formulazione delle espressioni regex, ed è per questo che lo sto chiedendo. Ho cercato una risposta, ma non ho trovato una risposta diretta. Il più vicino che ho avuto è stato questo: un’espressione regolare per tutto tranne una stringa vuota in c # , ma non funziona davvero per me ..

Sostituisci “*” con “+”, poiché “*” significa “0 o più occorrenze”, mentre “+” significa “almeno un’occorrenza”

Puoi utilizzare + o la syntax {min, max} :

 ^[0-9\(\)\/\+ \-]{1,}$ 

o

 ^[0-9\(\)\/\+ \-]+$ 

A proposito: questa è un’ottima fonte per imparare le espressioni regolari (ed è divertente): http://regexone.com/

Ovviamente è necessario sostituire Sostituisci * con + , come + corrisponde a 1 o più caratteri. Comunque all’interno della class di personaggi non devi fare tutto ciò che fuggi. La tua espressione regolare può essere semplificata per:

 ^([0-9()\/+ -]+)$ 

Esistono molti tipi di pattern che possono corrispondere a stringhe vuote. La regex OP appartiene a un tipo ^.*$ , Ed è facile modificarlo per impedire la corrispondenza vuota delle stringhe sostituendo il quantificatore * (= {0,} ) (che significa zero o più ) con il + (= {1,} ) quantificatore (che significa uno o più ), come è già stato menzionato nei post qui.

Esistono altri tipi di modello che corrispondono alle stringhe vuote e non è sempre ovvio come impedire che corrispondano alle stringhe vuote.

Ecco alcuni di questi modelli con soluzioni:

Modelli non ancorati (corrispondenti ovunque all’interno di una stringa)

[^"\\]*(?:\\.[^"\\]*)* (?:[^"\\]|\\.)+

abc||def abc|def (rimuovi l’operatore aggiuntivo | alternanza)

Pattern ancorati (corrispondenti ovunque all’interno di una stringa)

^a*$ ^a+$ ( + corrisponde a 1 o più caratteri)

^(a)?(b)?(c)?$ ^(?!$)(a)?(b)?(c?)$ (il lookahead negativo (?!$) fallisce la corrispondenza se fine stringa è all’inizio della stringa)
o ^(?=.)(a)?(b)?(c?)$ (l’aspetto positivo (?=.) richiede almeno un singolo carattere . , può corrispondere o meno caratteri di interruzione di riga a seconda dei modificatori / regex gusto)

^$|^abc$ ^abc$ (rimuovi l’alternativa ^$ che consente a un’espressione regolare di far corrispondere una stringa vuota)

^(?:abc|def)?$ ^(?:abc|def)$ (rimuovi il quantificatore che ha reso facoltativo il gruppo (?:abc|def) )