Per questo è necessario utilizzare le proprietà dei caratteri Unicode e blocchi. Ad ogni punto di codice Unicode sono state assegnate alcune proprietà, ad es. questo punto è una lettera. I blocchi sono intervalli di punti di codice.
Per maggiori dettagli, si veda:
quelle proprietà Unicode e blocchi sono scritti \p{Name}
, dove "nome" è il nome della proprietà o blocco.
Quando è una "P" maiuscola come questa \P{Name}
, quindi è la negazione della proprietà/blocco, cioè corrisponde a qualsiasi altra cosa.
Ci sono per es. alcune proprietà (solo un breve estratto):
- L ==> Caratteri di tutte le lettere.
- Lu ==> Lettera, maiuscolo
- Ll ==> Lettera, minuscolo
- N ==> Tutti i numeri. Ciò include le categorie Nd, Nl e No.
- Pc ==> Punteggiatura, connettore
- P ==> Tutti i caratteri di punteggiatura. Ciò include le categorie Pc, Pd, Ps, Pe, Pi, Pf e Po.
- Sm ==> Simbolo, matematica
ci sono per esempioalcuni blocchi (solo un breve estratto):
- 0000 - 007F ==> IsBasicLatin
- 0400 - 04FF ==> IsCyrillic
- 1000 - 109 F ==> IsMyanmar
Cosa Ho usato la soluzione:
\P{L}
è una proprietà di carattere che corrisponde a qualsiasi carattere che non sia una lettera ("L" per Lettera)
\p{IsBasicLatin}
è un blocco Unicode che corrisponde ai punti di codice 0000 - 007F
Così il vostro regex sarebbe:
^[\P{L}\p{IsBasicLatin}]+$
In parole povere:
Questo corrisponde a una stringa dal inizio alla fine (^
e $
), quando ci sono (almeno una) solo lettere o caratteri non ASCII (punti doce 0000 - 007F)
Una breve C Metodo # prova:
string[] myStrings = { "Foobar",
"[email protected]!\"§$%&/()",
"Föobar",
"fóÓè"
};
Regex reg = new Regex(@"^[\P{L}\p{IsBasicLatin}]+$");
foreach (string str in myStrings) {
Match result = reg.Match(str);
if (result.Success)
Console.Out.WriteLine("matched ==> " + str);
else
Console.Out.WriteLine("failed ==> " + str);
}
Console.ReadLine();
Stampe:!
abbinato ==> Foobar
abbinato ==> foo @ bar \ "§ $% & /()
non riuscito ==> Föobar
non riuscito ==> fóÓè
Non '[\ P {L} \ p {IsBasicLatin}]' corrisponde a non-lettere non inglesi? Ad esempio altri tipi di cifre come? Non penso che sia stato desiderato. Sembra che voglia solo abbinare i caratteri ASCII di base. – Qtax
Sì, certo. Questo è quello che ho capito, basta escludere le lettere non ASCII (e abbinare tutti gli altri caratteri Unicode). Se questa comprensione è sbagliata, la soluzione è molto semplice e già qui con la risposta accettata, ma questa è una conoscenza di base delle regex e non giustificherebbe una taglia. – stema