Tôi đã tìm kiếm và tìm kiếm và chơi và chơi với nó và mặc dù nó không hoàn hảo nhưng nó có thể giúp những người khác cố gắng xác nhận họ và tên đã được cung cấp dưới dạng một biến.
Trong trường hợp của tôi, biến đó là $ name.
Tôi đã sử dụng mã sau cho PHP của mình:
if (preg_match('/\b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- \']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -\']{1}[A-Z]{1}[a-z]{1,30}){2,5}/', $name)
# there is no space line break between in the above "if statement", any that
# you notice or perceive are only there for formatting purposes.
#
# pass - successful match - do something
} else {
# fail - unsuccessful match - do something
Tôi đang tự học RegEx nhưng tôi có lời giải thích cho mã do bạn thân RegEx cung cấp.
Nó đây:
Khẳng định vị trí ở ranh giới từ «\ b»
So khớp biểu thức chính quy bên dưới và nắm bắt đối sánh của nó thành số tham chiếu ngược 1
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [- \ '] { 1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [- \ '] {1} [AZ] {1} [ az] {1,30}) {2,5} »
Từ 2 đến 5 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{2,5}»
* TÔI CẦN MỘT SỐ GIÚP ĐỠ Ở ĐÂY KHI HIỂU VỀ CÁC ĐIỀU CHỈNH CỦA LƯU Ý NÀY *
Lưu ý: Tôi đã lặp lại chính nhóm chụp. Nhóm sẽ chỉ chụp lần lặp cuối cùng. Đặt một nhóm chụp xung quanh nhóm lặp lại để chụp tất cả các lần lặp lại. «{2,5}»
Khớp với biểu thức chính quy bên dưới (chỉ thử thay thế tiếp theo nếu biểu thức này không thành công) «[AZ] {1} [az] {1,30} [-] {0,1}»
Khớp một ký tự trong phạm vi giữa “A” và “Z” «[AZ] {1}»
Đúng 1 lần «{1}»
Khớp một ký tự trong phạm vi giữa “a” và “z” «[az] {1,30}»
Từ một đến 30 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{1,30}»
Khớp một ký tự có trong danh sách “-” «[-] {0,1}»
Từ 0 đến 1 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{0,1}»
Hoặc so khớp biểu thức chính quy số 2 bên dưới (chỉ thử thay thế tiếp theo nếu cái này không thành công) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
Khớp một ký tự trong phạm vi giữa “A” và “Z” «[AZ] {1}»
Đúng 1 lần «{1}»
Khớp một ký tự có trong danh sách bên dưới «[- \ '] {1}»
Đúng 1 lần «{1}»
Một trong các ký tự “-” «-» A 'ký tự «\'»
Khớp một ký tự trong phạm vi giữa “A” và “Z” «[AZ] {0,1}»
Từ 0 đến 1 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{0,1}»
Khớp một ký tự trong phạm vi giữa “a” và “z” «[az] {1,30}»
Từ một đến 30 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{1,30}»
Khớp một ký tự có trong danh sách “-” «[-] {0,1}»
Từ 0 đến 1 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{0,1}»
Hoặc đối sánh biểu thức chính quy số 3 bên dưới (toàn bộ nhóm không thành công nếu biểu thức này không khớp) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
Khớp một ký tự trong phạm vi giữa “a” và “z” «[az] {1,2}»
Từ một đến 2 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{1,2}»
Khớp một ký tự trong phạm vi giữa “” và “'” «[- \'] {1}»
Đúng 1 lần «{1}»
Khớp một ký tự trong phạm vi giữa “A” và “Z” «[AZ] {1}»
Đúng 1 lần «{1}»
Khớp một ký tự trong phạm vi giữa “a” và “z” «[az] {1,30}»
Từ một đến 30 lần, nhiều lần nhất có thể, trả lại khi cần thiết (tham lam) «{1,30}»
Tôi biết việc xác thực này hoàn toàn giả định rằng mọi người điền vào biểu mẫu đều có tên phương Tây và điều đó có thể loại bỏ phần lớn người dân trên thế giới. Tuy nhiên, tôi cảm thấy đây là một bước đi đúng hướng. Có lẽ cụm từ thông dụng này quá cơ bản để các chuyên gia có thể giải quyết một cách đơn giản hoặc có thể có một số lý do khác khiến tôi không thể tìm thấy mã trên trong các tìm kiếm của mình. Tôi đã dành quá nhiều thời gian để cố gắng tìm ra điều này, bạn có thể sẽ nhận thấy tâm trí của tôi mù mịt như thế nào về tất cả những điều này nếu bạn nhìn vào tên thử nghiệm của tôi dưới đây.
Tôi đã kiểm tra mã trên các tên sau và kết quả nằm trong dấu ngoặc đơn ở bên phải của mỗi tên.
- STEVE SMITH (thất bại)
- Stev3 Smith (thất bại)
- STeve Smith (không đạt)
- Steve SMith (thất bại)
- Steve Sm1th (đã truyền lại Steve Sm)
- d'Are to Beaware (đã chuyển sang Are to Beaware)
- Jo Blow (đạt)
- Hyoung Kyoung Wu (đạt)
- Mike O'Neal (đã qua)
- Steve Johnson-Smith (đã qua)
- Jozef-Schmozev Hiemdel (đã qua)
- O Henry Smith (đã qua)
- Mathais d'Arras (đạt)
- Martin Luther King Jr (đã qua)
- Downtown-James Brown (đã qua)
- Darren McCarty (đã qua)
- George De FunkMaster (đã qua)
- Bóng rổ Kurtis B-Ball (vượt qua)
- Ahmad el Jeffe (đạt)
Nếu bạn có các tên cơ bản, thì phải có nhiều hơn một đến năm tên để mã trên hoạt động, tương tự như những tên mà tôi đã sử dụng trong quá trình thử nghiệm, mã này có thể dành cho bạn.
Nếu bạn có bất kỳ cải tiến nào, vui lòng cho tôi biết. Tôi chỉ đang ở giai đoạn đầu (vài tháng đầu tiên tìm hiểu về RegEx.
Cảm ơn và chúc may mắn, Steve