Actions

Sử dụng biểu thức chính quy

From LimeSurvey Manual

This page is a translated version of the page Using regular expressions and the translation is 100% complete.

Biểu thức chính quy phải bắt đầu và kết thúc bằng dấu gạch chéo lên ("/"). Bạn có thể tìm thấy thư viện biểu thức chính quy tốt tại http://www.regexlib.net/. Những mẫu này hầu như sẽ luôn hoạt động nếu chúng được bao quanh bởi các dấu gạch chéo về phía trước.

Để kiểm tra biểu thức chính quy của bạn, bạn có thể sử dụng trình kiểm tra biểu thức chính quy này.

Template:Lưu ý

Template:Cảnh báo


Quan trọng: Biểu thức chính quy trong điều kiện

Lưu ý rằng khi sử dụng biểu thức chính quy trong trình chỉnh sửa điều kiện, KHÔNG bao gồm dấu gạch chéo đầu và cuối.


Xác thực email

Cập nhật (12/2018): Vì ngày nay tên miền không chỉ chứa các ký tự đặc biệt như “ü” mà còn sử dụng nhiều hơn 3 ký tự làm tên miền như .tech hoặc .company, biểu thức chính quy email bên dưới chỉ kiểm tra nếu “@” và “.” tồn tại trong địa chỉ email đã nhập.

 
/^.+?@.+?\..+$/

Nếu bạn muốn xác thực một địa chỉ trên mỗi dòng, trong trường văn bản dài nhiều dòng:

 
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\ n)?\n?)+)*)$/

Tại biểu thức chính quy lỗi thời này, tên miền bị giới hạn ở 3 ký tự, không bao gồm tất cả các miền có sẵn:

 
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/

Mã bưu điện

Mã bưu điện của Úc:

/^[0-9]{4}/

Mã bưu điện Brazil

/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/

Mã bưu điện Canada

/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/

Mã bưu chính Hoa Kỳ

/^[0-9]{5}([- /]?[0-9]{4})?$/

Để mã bưu chính bắt đầu bằng số 0, hãy sử dụng:

/^[0-9]{5}(?:-[0-9]{4})?$/

Mã bưu điện của Vương quốc Anh

/^[AZ][AZ]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i

Lưu ý rằng điều này không chính xác lắm và việc xác thực chính xác hơn sẽ phức tạp hơn nhiều. Ví dụ: xem Câu trả lời StackOverflowWikipedia để biết thêm thông tin.

Mã bưu điện của Pháp

/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)| (^98[46-8]\d{2}$)/

Biểu thức trên rất chính xác và nó sẽ kiểm tra xem Bộ Pháp có tồn tại hay không (hai chữ số đầu tiên), bao gồm các Bộ hải ngoại và Lãnh thổ hải ngoại (DOM-TOM).


Số điện thoại

Số điện thoại Hoa Kỳ

/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d {2}[- ]?\d{4}$/

hoặc

/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/

Tùy chọn thứ hai này sẽ khớp với tất cả các số điện thoại của Canada và Hoa Kỳ bao gồm các ký hiệu không phải chữ số bao gồm:

. ( ) - (không gian)

Điều này sẽ cho phép bạn khớp các số điện thoại giống như bên dưới:

  • (555)555 5555
  • 555.555.5555
  • 555 555 5555
  • (555)-555-5555
  • 555-555-5555
  • 555555555

Số điện thoại của Úc

Các mẫu sau khớp với tất cả các số điện thoại di động và điện thoại cố định khác nhau của Úc bao gồm tiền tố quốc gia "+61":

  • (02) 9123 6535
  • 03 1234-5345
  • 0412 345 678
  • + 61 2 3456 789

Nhưng không phải:

  • 234 3450 234
  • a234 534 3432
  • 134567
  • 123456789013

Dấu ngoặc, khoảng trắng và dấu gạch nối được bỏ qua.

Các phiên bản 'Rất chính xác:' được liệt kê ở đây khớp với bốn hoặc năm chữ số đầu tiên trong một số để đảm bảo rằng chúng là các số hợp lệ ở Úc.

'Không chính xác lắm:' chỉ khớp với chữ số thứ nhất và thứ hai nên có thể cho phép các số không hợp lệ.

Tất cả số điện thoại của Úc (điện thoại di động và cố định - bắt buộc phải có mã vùng)

Rất chính xác:

/^\(?(?:\+?61|0)(?:(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]? [0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[ 0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2 -7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9] [ -]?[0-9]))(?:[ -]?[0-9]){6}|4\)?[ -]?(?:(?:[01][ -]?[ 0-9]|2[ -]?[0-57-9]|3[ -]?[1-9]|4[ -]?[7-9]|5[ -]?[018])[ -]?[0-9]|3[ -]?0[ -]?[0-5])(?:[ -]?[0-9]){5})$/

Không chính xác lắm:

/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/

Tất cả số điện thoại của Úc (chỉ điện thoại cố định - yêu cầu mã vùng)

Rất chính xác:

/^\(?(?:\+?61|0)(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0- 9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9 ]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7] |7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -] ?[0-9]))(?:[ -]?[0-9]){6}$/

Không chính xác lắm:

/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/

Số điện thoại cố định của New South Wales (mã vùng tùy chọn)

Rất chính xác:

/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[ 0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/

Không chính xác lắm:

/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/

Số điện thoại cố định Victoria và Tasmania (mã vùng tùy chọn)

Rất chính xác:

/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/

Không chính xác lắm:

/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/

Số điện thoại cố định của Queensland (mã vùng tùy chọn)

Rất chính xác:

/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -] ?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/

Không chính xác lắm:

/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/

Số điện thoại cố định ở Nam Úc, Lãnh thổ phía Bắc, Tây Úc (mã vùng tùy chọn)

Rất chính xác:

/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9] [0-9])$/

Không chính xác lắm:

/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/

Chỉ số điện thoại di động của Úc

Rất chính xác:

/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ? [7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/

Không chính xác lắm:

/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/

Số điện thoại của Bỉ

 /^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2 }){2}$/

Số điện thoại di động của Bỉ

 /^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/

Số điện thoại ở Pháp

 /^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/

Số điện thoại di động của Pháp

 /^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/

Số điện thoại Luxembourg

 /^((\+|00\s?)352)?(\s?\d{2}){3,4}$/

Số điện thoại di động Luxembourg

 /^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/

Dấu tiếng Đức (có dấu cộng hoặc dấu trừ tùy chọn)

/^[1-6]{1}[\+|\-]?$/


Xác nhận tuổi

Ví dụ: Tuổi 20-99

 /([2-9][0-9])/

Ví dụ: Tuổi 18-35

 /(1[8-9]|2[0-9]|3[0-5])/

Ví dụ: Tuổi 19-65

 /^(1[8-9]|[2-5][0-9]|6[0-5])$/


Xác thực số

Các số từ 1 đến 99999

 /^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9] [0-9]|[1-9][0-9][0-9][0-9][0-9])$/
 /^[1-9][0-9]{0,4}$/ thực hiện tương tự như trên nhưng sẽ chạy nhanh hơn một chút

Các số từ 1 đến 999, 1.000 đến 999.999 đến 999.999.999

 /^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/

Chấp nhận các số từ 1 đến 999, 1.000 đến 999.999 đến 999.999.999 nhưng từ chối các số như 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333

Xác thực số bằng số thập phân tùy chọn (đối với giá)

Chấp nhận các số từ 0 đến 199, với 2 số thập phân tùy chọn:

 /^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9]) ?$/

Xác thực số bằng dấu phân cách nghìn

Dấu cách làm dấu phân cách, không có dấu trừ

 /^(?!0)\d{1,3}(\ \d{3})*$/

Dấu chấm làm dấu phân cách, được phép trừ

 /^-?(?!0)\d{1,3}(\.\d{3})*$/

Nó buộc hai dấu thập phân và chấp nhận các số từ 1,00 đến 999.999.999,00 với dấu phẩy tùy chọn phân cách hàng nghìn/triệu bao gồm tất cả các giá trị sau: 1,00, 1.000,00, 12,345,67, 12345,02, 123,456,468,00, 1234566,00, 1234567 89,00 nhưng không phải 1 ,23,00, 12,3,4 hoặc 1234,43,04

 /^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/

Tương tự như trên: Buộc hai dấu thập phân nhưng chấp nhận số "0" trước dấu phân cách thập phân ",".

 /[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/

Tương tự như trên nhưng hai dấu thập phân là tùy chọn:

 /^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2}) ?$/

Tháng (1-12)

Nếu bạn muốn hỏi tháng sinh của một người, bạn có thể xác thực dữ liệu đầu vào như sau:

/^[0]*[1-9]$|^[0]*1[0-2]$/

Chiều rộng tối thiểu (đặt thành 3 trong ví dụ này)

/^.{3,}$/


Tiền tệ

Tiền tệ Mỹ (ký hiệu đô la và xu tùy chọn)

/^\$?\d+(\.(\d{2}))?$/

Kiểm tra cách sử dụng dấu phẩy:

 /^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/

Giá Thụy Sĩ

Một số có hai số thập phân sau dấu thập phân, số cuối cùng là 5 hoặc 0:

/^(\d+)(\.\d(05)?)?$/


Xác nhận điểm

1-10

/^[1-9]{1}$|^10$/

1-100

/^[1-9]?[0-9]{1}$|^100$/


Xác thực văn bản

loại câu hỏi nhiều văn bản ngắn hiện không hỗ trợ các câu trả lời tối thiểu hoặc tối đa. Một cách để giải quyết vấn đề này là sử dụng loại câu hỏi văn bản dài tự do với biểu thức chính quy.

Biểu thức dưới đây kiểm tra ít nhất một từ trên mỗi dòng trong ít nhất 3 dòng và không quá 10 dòng:

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?! & \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^, .;:?!& \n\r]+)*)){2,10}/is

Nếu muốn, hãy nói năm từ trên mỗi dòng, bạn có thể thay đổi dấu sao/dấu hoa thị đầu tiên và cuối cùng thành {4,}:

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.; :?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is

Nếu bạn muốn một hoặc nhiều từ trên mỗi dòng (giữa dòng 1 và dòng 5), bạn có thể thay đổi nội dung nằm trong dấu ngoặc nhọn cuối cùng thành 0,4 (lưu ý bạn sử dụng 0 vì bạn đã khớp dòng đầu tiên).

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?! & \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^, .;:?!& \n\r]+)*)){0,4}/is

Đếm từ

Phần sau đây giới hạn số lượng từ được phép ở mức tối thiểu là 1 và tối đa là 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
Để tăng mức tối thiểu hãy thay đổi phần 0 của {0,199}.

Để tăng hoặc giảm mức tối đa, hãy thay đổi phần "199" của {0,199}.

Xác thực thời gian

Có một số cách để viết định dạng thời gian. Một số tùy chọn có thể là 12 giờ hoặc 24 giờ, có giây hoặc không có giây. Mặc dù có thể sử dụng loại câu hỏi ngày (nó cũng có thể ghi lại thời gian), bạn có thể sử dụng loại câu hỏi văn bản tự do ngắn với một trong các các biểu thức chính quy xác nhận dưới đây.

Ba chuỗi xác thực sau đây kiểm tra thời gian 24 giờ (theo thứ tự xuất hiện) không tính giây, với giây tùy chọn cuối cùng có yêu cầu giây:

/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/

Ba phần sau khớp với thời gian 12 giờ, như trên với giây, giây tùy chọn và với giây bắt buộc:

/^(?">00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0- 9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))$/
/^(?:00:[0-5][0-9](?::[0-5][0-9])? (?:am|AM)|(?:0[1-9] |1[01]):[0-5][0-9](?::[0-5][0-9])? (?:[ap]m|[AP]M)|12:[ 0-5][0-9](?::[0-5][0-9])? (?:pm|PM))$/
/^(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01] ):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]: [0-5][0-9] (?:pm|PM))$/

Ba phần sau khớp với thời gian 12 hoặc 24 giờ như trên với giây, giây tùy chọn và với giây bắt buộc:

/^(?:(?:00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][ 0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))|(?:[01][0-9] |2[0-3]):[0-5][0-9])$/
/^(?:(?:00:[0-5][0-9](?[0-5][0-9])? (?:am|AM)|(?:0[1-9 ]|1[01]):[0-5][0-9](?[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0 -5][0-9](?[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]) :[0-5][0-9](?[0-5][0-9])?)$/
/^(?:(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1 [01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0- 9]:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0- 9]:[0-5][0-9])$/

Các tiểu bang của Hoa Kỳ

Để xác thực cho một tiểu bang, hãy sử dụng thông tin sau (ví dụ là Texas):

  • TX chỉ viết hoa:
     /^(TX)$/
    
  • tx chỉ viết thường:
     /^(tx)$/
    
  • TX chữ hoa hoặc chữ thường:
     /^([T|t][X|x])$/
    


Bộ lọc tục tĩu

Để lọc các từ tục tĩu khỏi câu trả lời:

/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/

Thay thế "ENTERPROFANITYHERE" bằng từ xấu của bạn.

\b sẽ cho phép chuyển các từ như "ám sát" và "xin chào" nếu bạn nhập "ass" hoặc "địa ngục" làm từ tục tĩu của mình. Điều này cũng có tác dụng nếu bạn đang cố gắng loại bỏ các từ, tên khác, v.v. khỏi câu trả lời.


Liên kết hữu ích

Khi bắt đầu phần wiki này, chúng tôi khuyên bạn nên sử dụng https://regex101.com/ để kiểm tra/tạo biểu thức chính quy. Bạn cũng có thể sử dụng https://www.regextester.com/ để tạo biểu thức trong trường hợp bạn không hài lòng với tùy chọn đầu tiên. Bạn có thể sử dụng https://extendsclass.com/regex-tester.html để trực quan hóa các biểu thức chính quy.