Espressione regolare per abbinare solo caratteri alfabetici


157

Mi chiedevo se avrei potuto ottenere un'espressione regolare che corrisponderà a una stringa che ha solo caratteri alfabetici e solo quella.


2
Qualcosa come / ^ [a-zA-Z] + $ / dovrebbe funzionare.
Julian Go,

10
È àun carattere alfabetico in base alla definizione? Che lingua stai usando?
Tim Pietzcker,

2
una stringa vuota deve corrispondere?
ysth

no, una stringa vuota non deve corrispondere
Steffan Harris,

Una nota importante: non hai indicato una lingua o uno strumento in cui desideri utilizzare la regex che stai chiedendo. Sebbene i principi delle regex siano gli stessi universalmente, la sintassi non è ugualmente ovunque. Dovresti fare riferimento a dove vuoi usarlo.
sergiol

Risposte:


186

È possibile utilizzare una di queste 2 varianti:

/^[A-Z]+$/i
/^[A-Za-z]+$/

per abbinare una stringa di input di alfabeti ASCII.

  • [A-Za-z] corrisponderà a tutti gli alfabeti (sia minuscoli che maiuscoli).
  • ^e $farà in modo che solo questi alfabeti vengano abbinati.

Codice:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

Produzione:

array(0) {
}

Il test case è per il commento di OP che vuole abbinare solo se nell'input sono presenti 1 o più alfabeti. Come puoi vedere nel test case che corrisponde non è riuscito perché c'era ^nella stringa di input abcAbc^Xyz.

Nota: la risposta sopra corrisponde solo agli alfabeti ASCII e non ai caratteri Unicode. Se si desidera abbinare le lettere Unicode, utilizzare:

/^\p{L}+$/u

Qui, \p{L}corrisponde a qualsiasi tipo di lettera da qualsiasi lingua


22
In alcuni dialetti, [Az] corrisponderà ai valori di punteggiatura ASCII che si verificano tra 'Z' e 'a', in particolare '[', '\', ']', '^', '-' e '' ', come nonché da "A" a "Z" e da "a" a "z".
Lee,

Quello che volevo davvero è il modo di abbinare la mia stringa solo quando ha caratteri alfabetici, se ha un carattere non alfabetico, non dovrebbe corrispondere.
Steffan Harris,

7
@Lee: non alcuni. Tutti loro. Questa regex è sbagliata nel suo stato attuale.
Tim Pietzcker,

7
\w is shorthand for A-Za-z- non proprio, \wè una scorciatoia per[a-zA-Z0-9_]
anubhava,

1
Buon punto @ jpmc26. Ho modificato la mia risposta per rimuovere il mio errore originale.
anubhava,

55

Se devi includere caratteri alfabetici non ASCII e se il tuo sapore regex supporta Unicode, allora

\A\pL+\z

sarebbe la regex corretta.

Alcuni motori regex non supportano questa sintassi Unicode ma consentono alla \wstenografia alfanumerica di corrispondere anche a caratteri non ASCII. In tal caso, puoi ottenere tutti gli alfabeti sottraendo cifre e caratteri di sottolineatura in \wquesto modo:

\A[^\W\d_]+\z

\Acorrisponde all'inizio della stringa, \zalla fine della stringa ( ^e $corrisponde anche all'inizio / alla fine delle righe in alcune lingue come Ruby o se sono impostate alcune opzioni di regex).


38
+1 per non considerare l'alfabeto inglese come l'unico alfabeto
srcspider

7
+1, come sopra. l'inglese non è l'unico alfabeto e molte persone scrivono il loro nome usando caratteri non ascii per esprimerlo correttamente.
Ben Barkay,

22

Questo corrisponderà a uno o più caratteri alfabetici:

/^[a-z]+$/

Puoi renderlo insensibile alle maiuscole usando:

/^[a-z]+$/i

o:

/^[a-zA-Z]+$/

Questo corrisponderà solo ai caratteri latini.
virgoletteBro

13

In Ruby e in altre lingue che supportano le classi di caratteri POSIX nelle espressioni tra parentesi, puoi fare semplicemente:

/\A[[:alpha:]]+\z/i

Che corrisponderà ai caratteri alfa in tutte le lingue alfabetiche Unicode. Vai tranquillo.

Maggiori informazioni: http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html


1
E per ottenere tutto tranne quei personaggi (che non sono stati documentati) usano [^[:alpha]].
spyle,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.