PowerShell por defecto se ajusta a mayúsculas y minúsculas, por lo que necesita usar el operador -cmatch
:
if ($mystring -cmatch "^[a-z]*$") { ... }
-cmatch
es siempre entre mayúsculas y minúsculas, mientras que -imatch
siempre es sensible a las mayúsculas.
Nota al margen: Su expresión regular también era un poco rara. Básicamente desea que el uno que he proporcionado aquí, que consiste en
- El anchor para el inicio de la cadena (
^
)
- Un character class de minúsculas letras latinas (
[a-z]
)
- Un quantifier, contando a repita la clase de caracteres al menos 0 veces, haciendo coincidir tantos caracteres como sea necesario (
*
). Puede usar +
para rechazar una cadena vacía.
- El anchor para el final de la cadena (
$
). Los dos anclajes se aseguran de que la expresión regular tenga que coincidir con cada carácter en la cadena. Si simplemente usara [a-z]*
, esto coincidiría con cualquier cadena que tenga una cadena de al menos 0
letras minúsculas en algún lugar en ella. Que sería cada cadena.
PS: Ahmad tiene un punto, sin embargo, que si la cadena podría consistir en otras cosas que no sean letras también y usted querrá asegurarse de que cada carta en ella es menor de los casos, en lugar de que también requiere que la cadena se compone exclusivamente de letras, entonces usted tiene que invertir la clase de caracteres, tipo de:
if ($mystring -cmatch "^[^A-Z]*$") { ... }
el ^
al inicio de la clase de caracteres invierte la clase, haciendo coincidir cada personaje no incluidos. De esta manera, esta expresión regular solo fallaría si la cadena contiene letras mayúsculas en alguna parte. Aún así, el -cmatch
todavía es necesario.
que funciona muy bien, gracias por la explicación adicional. – falkaholic