Biểu thức chính quy để chỉ khớp với các ký tự chữ cái


157

Tôi đã tự hỏi Nếu tôi có thể có được một biểu thức chính quy sẽ khớp với một chuỗi chỉ có các ký tự chữ cái và chỉ một mình nó.


2
Một cái gì đó như / ^ [a-zA-Z] + $ / nên hoạt động.
Julian Go

10
àmột ký tự chữ cái theo định nghĩa của bạn? Ngôn ngữ của bạn đang sử dụng là gì?
Tim Pietzcker

2
một chuỗi trống phù hợp?
ysth

Không có chuỗi trống nào không khớp
Steffan Harris

Một lưu ý quan trọng: bạn đã không giới thiệu một ngôn ngữ hoặc công cụ mà bạn muốn sử dụng regex mà bạn yêu cầu. Rõ ràng các nguyên tắc của regexes là giống nhau trên toàn cầu, cú pháp không giống nhau ở mọi nơi. Bạn nên tham khảo nơi bạn muốn sử dụng nó.
sergiol

Câu trả lời:


186

Bạn có thể sử dụng bất kỳ 2 biến thể sau:

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

để khớp với chuỗi đầu vào của bảng chữ cái ASCII.

  • [A-Za-z] sẽ khớp với tất cả các bảng chữ cái (cả chữ thường và chữ hoa).
  • ^$sẽ đảm bảo rằng không có gì ngoài những bảng chữ cái này sẽ được khớp.

Mã số:

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

Đầu ra:

array(0) {
}

Trường hợp thử nghiệm là cho nhận xét của OP rằng anh ta chỉ muốn khớp nếu có 1 hoặc nhiều bảng chữ cái có trong đầu vào. Như bạn có thể thấy trong trường hợp kiểm tra khớp không thành công vì có ^trong chuỗi đầu vào abcAbc^Xyz.

Lưu ý: Xin lưu ý rằng câu trả lời trên chỉ khớp với bảng chữ cái ASCII và không khớp với các ký tự Unicode. Nếu bạn muốn khớp các chữ cái Unicode thì hãy sử dụng:

/^\p{L}+$/u

Ở đây, \p{L}phù hợp với bất kỳ loại thư từ bất kỳ ngôn ngữ


22
Trong một số phương ngữ, [Az] sẽ khớp với các giá trị dấu câu ASCII xảy ra giữa 'Z' và 'a', cụ thể là '[', '\', ']', '^', '-' và '`', như cũng như 'A' đến 'Z' và 'a' đến 'z'.
Lee

Điều tôi thực sự muốn là cách chỉ khớp chuỗi của tôi khi nó có các ký tự chữ cái, nếu nó có một ký tự không phải là chữ cái, thì nó không khớp.
Steffan Harris

7
@Lee: Không phải một số. Tất cả bọn họ. Regex này là sai trong tình trạng hiện tại của nó.
Tim Pietzcker

7
\w is shorthand for A-Za-z- không thực sự, \wlà tốc ký cho[a-zA-Z0-9_]
anubhava

1
Điểm tốt @ jpmc26. Tôi đã chỉnh sửa câu trả lời của mình để loại bỏ sai lầm ban đầu của tôi.
anubhava

55

Nếu bạn cần bao gồm các ký tự chữ cái không phải ASCII và nếu hương vị regex của bạn hỗ trợ Unicode, thì

\A\pL+\z

sẽ là regex chính xác.

Một số công cụ regex không hỗ trợ cú pháp Unicode này nhưng cho phép tốc \wký chữ và số cũng khớp với các ký tự không phải ASCII. Trong trường hợp đó, bạn có thể nhận được tất cả các bảng chữ cái bằng cách trừ các chữ số và dấu gạch dưới \wnhư thế này:

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

\Akhớp ở đầu chuỗi, \zở cuối chuỗi ( ^$cũng khớp ở đầu / cuối dòng trong một số ngôn ngữ như Ruby hoặc nếu một số tùy chọn regex nhất định được đặt).


38
+1 vì không coi bảng chữ cái tiếng Anh là bảng chữ cái duy nhất
srcspider

7
+1, giống như trên. Tiếng Anh không phải là bảng chữ cái duy nhất và nhiều người viết tên của họ bằng cách sử dụng các ký tự không phải là ascii để diễn đạt chính xác.
Ben Barkay

22

Điều này sẽ phù hợp với một hoặc nhiều ký tự chữ cái:

/^[a-z]+$/

Bạn có thể làm cho trường hợp không nhạy cảm bằng cách sử dụng:

/^[a-z]+$/i

hoặc là:

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

Điều này sẽ chỉ phù hợp với các nhân vật Latin.
trích dẫnBro

13

Trong Ruby và các ngôn ngữ khác hỗ trợ các lớp ký tự POSIX trong biểu thức ngoặc, bạn có thể thực hiện đơn giản:

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

Điều đó sẽ phù hợp với ký tự alpha trong tất cả các ngôn ngữ bảng chữ cái Unicode. Dễ như ăn bánh.

Thông tin thêm: http://en.wikipedia.org/wiki/Regular_expression#Character_groupes http://ruby-doc.org/core-2.0/Regapi.html


1
Và để có được mọi thứ trừ những ký tự đó (không được ghi lại) sử dụng [^[:alpha]].
spyle

6

[a-zA-Z] nên làm điều đó tốt

Bạn có thể tham khảo bảng cheat .


2
có nhưng tôi cũng sẽ làm thế nếu chuỗi của tôi chứa một ký tự không phải từ mà nó vẫn khớp
Steffan Harris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.