PowerShell theo mặc định phù hợp với trường hợp-insensitively, vì vậy bạn cần phải sử dụng -cmatch
điều hành:
if ($mystring -cmatch "^[a-z]*$") { ... }
-cmatch
là luôn trường hợp nhạy cảm, trong khi -imatch
luôn là case-insensitive.
Lưu ý phụ: Cụm từ thông dụng của bạn cũng hơi lạ. Về cơ bản bạn muốn người tôi cung cấp ở đây bao gồm
- Các anchor cho sự bắt đầu của chuỗi (
^
)
- Một character class của chữ thường Latinh (
[a-z]
)
- Một quantifier, nói đến lặp lại lớp nhân vật ít nhất 0 lần, do đó khớp với nhiều ký tự nếu cần (
*
). Thay vào đó, bạn có thể sử dụng +
để không cho phép một chuỗi trống.
- anchor cho phần cuối của chuỗi (
$
). Hai neo đảm bảo rằng cụm từ thông dụng phải khớp với mỗi ký tự trong chuỗi. Nếu bạn chỉ sử dụng [a-z]*
thì điều này sẽ khớp với bất kỳ chuỗi nào có một chuỗi có ít nhất 0
chữ thường ở đâu đó trong đó. Mà sẽ là mỗi chuỗi.
PS: Ahmad có một điểm, mặc dù, rằng nếu chuỗi của bạn có thể bao gồm những thứ khác hơn chữ quá và bạn muốn chắc chắn rằng tất cả các thư trong đó là chữ thường, thay vì cũng đòi hỏi rằng chuỗi chỉ bao gồm các chữ cái, sau đó bạn phải đảo ngược lớp nhân vật, loại:
if ($mystring -cmatch "^[^A-Z]*$") { ... }
các ^
vào lúc bắt đầu của đảo ngược lớp nhân vật lớp, phù hợp với tất cả các nhân vật không bao gồm. Qua đó biểu thức chính quy này sẽ chỉ thất bại nếu chuỗi chứa chữ hoa ở đâu đó. Tuy nhiên, vẫn cần -cmatch
.
rằng hoạt động tuyệt vời, cảm ơn cho lời giải thích thêm. – falkaholic