Biểu thức chính quy cho họ và tên


124

Đối với mục đích xác thực trang web, tôi cần xác thực tên và họ.

Đối với tên đầu tiên, nó chỉ nên chứa các chữ cái, có thể là một số từ có dấu cách và có tối thiểu ba ký tự, nhưng tối đa là 30 ký tự trên cùng. Một chuỗi trống không nên được xác thực (ví dụ: Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smithjason SMITH ).

Đối với họ, nó phải là một từ duy nhất, chỉ có các chữ cái, có ít nhất ba ký tự, nhưng nhiều nhất là 30 ký tự. Các chuỗi trống không nên được xác thực (ví dụ: lazslo , LazsloLAZSLO ).


10
Còn những cái tên như 'Jo' thì sao?
a'r

6
chỉ là một nhận xét: dấu gạch ngang rất phổ biến trong họ ... có thể cũng có những họ có dấu cách
tanascius

2
Lưu ý: một công cụ xác thực biểu thức sẽ bỏ qua các đầu vào trống: đây có thể là điều bạn muốn.
Hans Ke st ing

4
Nếu có thể, trừ khi bạn có một lý do thuyết phục đáng kinh ngạc để yêu cầu họ và tên, chỉ cần cung cấp một trường "Tên". kalzumeus.com/2010/06/17/…
Chris

Câu trả lời:


195

Đừng quên những cái tên như:

  • Mathias d'Arras
  • Martin Luther King, Jr.
  • Hector Sausage-Hausen

Điều này sẽ thực hiện thủ thuật cho hầu hết mọi thứ:

/^[a-z ,.'-]+$/i

HOẶC Hỗ trợ tên quốc tế với mã unicode siêu ngọt ngào:

/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u


4
Tôi sẽ thoát khỏi các ký tự đặc biệt trong các regexps này - đặc biệt là .(dấu thập phân / dấu chấm / dấu chấm đầy đủ) vì đó là ký tự đại diện regexp =)
Joel Purra

30
Bạn không thể xác nhận tất cả các ký tự quốc gia có thể có. Ví dụ, các ký tự Hungary őŐűŰbị thiếu, các ký tự Ba Lan łŁcũng vậy, chưa kể một số ký tự Lithuania và Latvia. Thay vì cố gắng tìm một thư viện biến các ký tự kỳ lạ thành phiên bản không dấu phù hợp, sau đó viết /^[a-z ,.'-]+$/iregexp.
gaborsch

69
Vì vậy, 陳大文không phải là một tên hợp lệ ở đây?
Alvin Wong

16
Đối với Unicode, hãy sử dụng /^[\p{L}'][ \p{L}'-]*[\p{L}]$/u, tuy nhiên khá dễ dàng.
Frederik Krautwald

4
AZ không cần phải được bao gồm trong ví dụ ban đầu vì bổ nghĩa i sau biểu thức có nghĩa là bỏ qua trường hợp.
mhanney

73

Bạn giả định sai về định dạng của họ và tên. Tốt hơn hết là không nên xác thực tên, ngoài việc kiểm tra xem nó có trống không.


lẽ ra phải là một bình luận.
Dementic

32

Sau khi xem qua tất cả các câu trả lời này, tôi đã tìm ra cách xây dựng một regex nhỏ hỗ trợ hầu hết các ngôn ngữ và chỉ cho phép các ký tự từ. Nó thậm chí còn hỗ trợ một số ký tự đặc biệt như dấu gạch nối, dấu cách và dấu nháy đơn. Tôi đã thử nghiệm trong python và nó hỗ trợ các ký tự bên dưới:

^[\w'\-,.][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$

Các nhân vật được hỗ trợ:

abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ'
陳大文
łŁőŐűŰZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųū
ÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁ
ŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ.-
ñÑâê都道府県Федерации
আবাসযোগ্য জমির걸쳐 있는

2
Trong số tất cả các câu trả lời này đã làm việc như một say mê sử dụng ng 4.
Deniss M.

1
Regex của bạn không thành công trên chuỗi 2 ký tự. Tôi nghĩ điều này đã sửa nó^[\w'\-,.]*[^_!¡?÷?¿\/\\+=@#$%ˆ&*(){}|~<>;:[\]]*$
TKA

Các ký tự quốc gia được hỗ trợ nhưng không phải ở vị trí đầu tiên. Tôi muốn thay đổi biểu thức thành^[^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
TOUDIdel

18

Tôi đã tạo một regex tùy chỉnh để xử lý các tên:

Tôi đã thử các loại tên này và thấy hoạt động hoàn hảo

  1. John Smith
  2. John D'Largy
  3. John Doe-Smith
  4. John Doe Smith
  5. Hector Sausage-Hausen
  6. Mathias d'Arras
  7. Martin Luther King
  8. Ai Wong
  9. Chao Chang
  10. Alzbeta Bara

RegEx của tôi trông như thế này:

^([a-zA-Z]{2,}\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)

Mô hình MVC4:

[RegularExpression("^([a-zA-Z]{2,}\\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\\s?([a-zA-Z]{1,})?)", ErrorMessage = "Valid Charactors include (A-Z) (a-z) (' space -)") ]

Xin lưu ý dấu đôi \\cho các ký tự thoát

Đối với những bạn mới sử dụng RegEx, tôi nghĩ tôi sẽ kèm theo lời giải thích.

^               // start of line
[a-zA-Z]{2,}    // will except a name with at least two characters
\s              // will look for white space between name and surname
[a-zA-Z]{1,}    // needs at least 1 Character
\'?-?           // possibility of **'** or **-** for double barreled and hyphenated surnames
[a-zA-Z]{2,}    // will except a name with at least two characters
\s?             // possibility of another whitespace
([a-zA-Z]{1,})? // possibility of a second surname

Tôi có một bài kiểm tra đơn vị kiểm tra một số tên, sau đó một số thứ không phải là tên. Danh sách không phải tên có 'mã thông báo thử nghiệm' là mục nhập đầu tiên. Điều này phù hợp với điều đó.
Rob

Đó gần như là những gì tôi đang tìm kiếm. Tôi đoán (có thể sai) rằng bạn là một chàng trai người Pháp. Và một trường hợp không được xử lý mà bạn có thể gặp phải trong tiếng Pháp: tên sáng tác, như Jean-Pierre, Marie-Charlotte, v.v. Tôi mới làm quen với reg exp nhưng tôi đoán là -? như bạn đã làm với họ, ở giữa 2 từ đầu tiên, có thể thực hiện công việc.
Linpter

Xin chào Linpter, Không phải tiếng Pháp, tuy nhiên tôi có tên tiếng Pháp. Đúng. Tôi chưa kiểm tra điều này, tuy nhiên bạn có thể thêm dấu - vào [] đầu tiên, vì vậy hãy thay đổi: ^ ([a-zA-Z] {2,} \ s [a-zA-z] {1,} ' ? -? [a-zA-Z] {2,} \ s? ([a-zA-Z] {1,})?) TO: ^ ([a-zA-Z -] {2,} \ s [a-zA-z] {1,} '? -? [a-zA-Z] {2,} \ s? ([a-zA-Z] {1,})?)
Francois Muller

16

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.

  1. STEVE SMITH (thất bại)
  2. Stev3 Smith (thất bại)
  3. STeve Smith (không đạt)
  4. Steve SMith (thất bại)
  5. Steve Sm1th (đã truyền lại Steve Sm)
  6. d'Are to Beaware (đã chuyển sang Are to Beaware)
  7. Jo Blow (đạt)
  8. Hyoung Kyoung Wu (đạt)
  9. Mike O'Neal (đã qua)
  10. Steve Johnson-Smith (đã qua)
  11. Jozef-Schmozev Hiemdel (đã qua)
  12. O Henry Smith (đã qua)
  13. Mathais d'Arras (đạt)
  14. Martin Luther King Jr (đã qua)
  15. Downtown-James Brown (đã qua)
  16. Darren McCarty (đã qua)
  17. George De FunkMaster (đã qua)
  18. Bóng rổ Kurtis B-Ball (vượt qua)
  19. 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


1
Những thứ như "Thứ tư" hoặc "IV" có hoạt động với điều này không?
majidarif

11

Tên sẽ là

"([a-zA-Z]{3,30}\s*)+"

Nếu bạn cần toàn bộ phần tên phải ngắn hơn 30 chữ cái, bạn cần phải kiểm tra riêng biệt, tôi nghĩ vậy. Biểu thức ".{3,30}"sẽ làm điều đó.

Yêu cầu về họ của bạn sẽ được chuyển thành

"[a-zA-Z]{3,30}"

nhưng bạn nên kiểm tra những điều này. Có rất nhiều họ chứa khoảng trắng.


Điều này có kiểm tra khoảng cách giữa?
Y_Y

2
Còn O'Connor thì sao? Dấu nháy đơn cũng cần được bao gồm.
Spaceman

1
Khá hoàn chỉnh. Tên đầu tiên có thể là "Jean-Claude" với dấu gạch ngang. Họ có thể là "D'arc" kèm theo dấu ngoặc kép. Thêm vào đó, nếu "François" là tên đầu tiên thì sao?
bart

1
Còn "Al" thì sao? Tên hợp lệ. Chỉ hai chữ cái. Còn tên tiếng Trung, tiếng Nga, tiếng Hindi thì sao? Còn tên châu Âu?
Christian Hujer

này làm việc wouldnt cho rất nhiều không phải tiếng Anh hoặc (? phi Latin) tên
Oldboy

7

Như maček đã nói:

Đừng quên những cái tên như:

Mathias d'Arras

Martin Luther King, Jr.

Hector Sausage-Hausen

và để loại bỏ các trường hợp như:

..Mathias

Martin King, Jr.-

Điều này sẽ bao gồm nhiều trường hợp hơn:

^([a-z]+[,.]?[ ]?|[a-z]+['-]?)+$

Nếu tôi muốn giới hạn độ dài ký tự của mình, vậy mã đó có thể là gì?
G.Abhisek

1
Vâng, Martin Luther King Jr trở lại như một trận đấu, và Vua Henry thứ Tám cũng vậy.
Steve Kinzey

7

Tôi đang làm việc trên ứng dụng xác thực Hộ chiếu Quốc tế (ICAO). Chúng tôi chỉ hỗ trợ các ký tự tiếng Anh. Trong khi hầu hết các ký tự quốc gia nước ngoài có thể được biểu thị bằng một ký tự trong bảng chữ cái Latinh, ví dụ như è bởi e, có một số ký tự quốc gia yêu cầu thêm một chữ cái để đại diện cho chúng, chẳng hạn như âm sắc tiếng Đức yêu cầu thêm 'e' vào chữ cái. ví dụ: ä bởi ae.

Đây là JavaScript Regex cho họ và tên chúng tôi sử dụng:

/^[a-zA-Z '.-]*$/

Số ký tự trên hộ chiếu quốc tế tối đa là 31 . Chúng tôi sử dụng maxlength = "31" để thông báo lỗi từ tốt hơn thay vì đưa nó vào regex.

Đây là một đoạn mã từ mã của chúng tôi trong AngularJS 1.6 với biểu mẫu và xử lý lỗi:

class PassportController {
  constructor() {
    this.details = {};
    // English letters, spaces and the following symbols ' - . are allowed
    // Max length determined by ng-maxlength for better error messaging
    this.nameRegex = /^[a-zA-Z '.-]*$/;
  }
}

angular.module('akyc', ['ngMessages'])
  .controller('PassportController', PassportController);
 
.has-error p[ng-message] {
  color: #bc111e;
}

.tip {
  color: #535f67;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
<script src="https://code.angularjs.org/1.6.6/angular-messages.min.js"></script>

<main ng-app="akyc" ng-controller="PassportController as $ctrl">
  <form name="$ctrl.form">

    <div name="lastName" ng-class="{ 'has-error': $ctrl.form.lastName.$invalid} ">
        <label for="pp-last-name">Surname</label>
        <div class="tip">Exactly as it appears on your passport</div>
        <div ng-messages="$ctrl.form.lastName.$error" ng-if="$ctrl.form.$submitted" id="last-name-error">
          <p ng-message="required">Please enter your last name</p>
          <p ng-message="maxlength">This field can be at most 31 characters long</p>
          <p ng-message="pattern">Only English letters, spaces and the following symbols ' - . are allowed</p>
        </div>
        
        <input type="text" id="pp-last-name" ng-model="$ctrl.details.lastName" name="lastName"
               class="form-control" required ng-pattern="$ctrl.nameRegex" ng-maxlength="31" aria-describedby="last-name-error" />
      </div>

      <button type="submit" class="btn btn-primary">Test</button>

  </form>
</main>


@danieltakeshi bạn không sử dụng Regex của tôi. Sử dụng cái này: / ^ [a-zA-Z '.-] * $ /
Alexander Burakevych

5

Tôi sử dụng:

/^(?:[\u00c0-\u01ffa-zA-Z'-]){2,}(?:\s[\u00c0-\u01ffa-zA-Z'-]{2,})+$/i

Và kiểm tra độ dài tối đa bằng một số phương tiện khác


5

Công việc regex này đối với tôi (được sử dụng trong Angular 8):

([a-zA-Z',.-]+( [a-zA-Z',.-]+)*){2,30}

nhập mô tả hình ảnh ở đây

Nó sẽ không hợp lệ nếu có: -

  1. Bất kỳ khoảng trắng nào bắt đầu hoặc kết thúc tên
  2. Có ký hiệu, ví dụ: @
  3. Ít hơn 2 hoặc nhiều hơn 30

Ví dụ Tên không hợp lệ (khoảng trắng)

nhập mô tả hình ảnh ở đây

Ví dụ về Tên hợp lệ:

nhập mô tả hình ảnh ở đây


6
Còn 'Björk Guðmundsdóttir' thì sao?
Mariusz Jamro

4

Vì lợi ích đơn giản, bạn có thể sử dụng:

(.*)\s(.*)

Điều tôi thích ở điều này là họ luôn đứng sau tên đầu tiên, vì vậy nếu bạn nhập các nhóm phù hợp này vào cơ sở dữ liệu và tên là John M. Smith, nhóm đầu tiên sẽ là John M. , và nhóm thứ 2 sẽ là Smith.


2
^\p{L}{2,}$

^ xác nhận vị trí ở đầu dòng.

\ p {L} khớp với bất kỳ loại chữ cái nào từ bất kỳ ngôn ngữ nào

{2,} Bộ định lượng - Đối sánh giữa 2 và không giới hạn số lần, nhiều lần nhất có thể, trả lại nếu cần (tham lam)

$ khẳng định vị trí ở cuối dòng

Vì vậy, nó phải là một cái tên bằng bất kỳ ngôn ngữ nào có chứa ít nhất 2 chữ cái (hoặc ký hiệu) không có số hoặc các ký tự khác.


hãy nhớ rằng một số ký tự như 'và - có giá trị trong tên.
Mathijs Segers

1

Vì vậy, với khách hàng, chúng tôi tạo ra regex điên rồ này:

(^$)|(^([^\-!#\$%&\(\)\*,\./:;\?@\[\\\]_\{\|\}¨ˇ“”€\+<=>§°\d\s¤®™©]| )+$)

1

Đối với họ và tên thực sự chỉ có 2 điều bạn nên tìm kiếm:

  1. Chiều dài
  2. Nội dung

Đây là biểu thức chính quy của tôi:

var regex = /^[A-Za-z-,]{3,20}?=.*\d)/

1. Chiều dài

Ở đây, {3,20} giới hạn độ dài của chuỗi từ 3 đến 20 ký tự.

2. Nội dung

Thông tin giữa các dấu ngoặc vuông [A-Za-z] cho phép các ký tự viết hoa và viết thường. Tất cả các ký hiệu tiếp theo (-,.) Cũng được phép.


1

Đây là những gì tôi sử dụng.

Regex này chỉ chấp nhận các tên có ký tự tối thiểu, từ A-Z a-z ,space and -.

Ví dụ về tên:

Ionut Ionete, Ionut-Ionete Cantemir, Ionete Ionut-Cantemirm Ionut-Cantemir Ionete-Second

Giới hạn ký tự của tên là 3. Nếu bạn muốn thay đổi điều này, hãy sửa đổi {3,} thành {6,}

([a-zA-Z\-]+){3,}\s+([a-zA-Z\-]+){3,}

2
Điều gì về ä å ö Ä Å Ö vv? Rất phổ biến trong tên Thụy Điển. Cái tên cuối cùng O'Conner cũng sẽ thất bại và những cái tên có nòng đôi cũng sẽ gây ra nhiều vấn đề. Điều này sẽ rất khó chịu cho những người có tên hợp lệ như vậy.
Héo

Còn dấu nháy đơn trong những cái tên như O'Connor thì sao?
Fogmeister

biểu thức của tôi trả về tên hợp lệ là Michael Jordan O'Reilly Jr.
Steve Kinzey,

0

Biểu thức sau sẽ hoạt động trên bất kỳ ngôn ngữ nào được UTF-16 hỗ trợ và sẽ đảm bảo rằng có tối thiểu hai thành phần đối với tên (tức là tên + họ), nhưng cũng sẽ cho phép bất kỳ số lượng tên đệm nào.

/^(\S+ )+\S+$/u

Tại thời điểm viết bài này, có vẻ như không có câu trả lời nào khác đáp ứng tất cả các tiêu chí đó. Ngay cả ^\p{L}{2,}$, gần nhất, cũng không phù hợp vì nó cũng sẽ khớp với các ký tự "vô hình", chẳng hạn như U+FEFF(Không gian ngắt có độ rộng bằng không).


không chuyển javascript cho regexr.com 1) cảnh báo tính năng unicode có thể không được hỗ trợ trong tất cả các trình duyệt. 2) nó cũng cho phép các số trong regex. ví dụ: michael dimmittsasd2123123
Michael Dimmitt

0

Hãy thử các giải pháp này, để có khả năng tương thích tối đa, như tôi đã đăng ở đây :

JavaScript:

var nm_re = /^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$/;

HTML5:

<input type="text" name="full_name" id="full_name" pattern="^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$" required>


0

Điều này dường như làm công việc cho tôi:

[\S]{2,} [\S]{2,}( [\S]{2,})*

-1

Một hàm đơn giản bằng cách sử dụng preg_match trong php

<?php
function name_validation($name) {
    if (!preg_match("/^[a-zA-Z ]*$/", $name) === false) {
        echo "$name is a valid name";
    } else {
        echo "$name is not a valid name";
    }
}

//Test
name_validation('89name');
?>


-2

Nếu bạn muốn toàn bộ tên có từ 3 đến 30 ký tự mà không có giới hạn đối với các từ riêng lẻ, hãy thử cách này:

[a-zA-Z ]{3,30}

Hãy lưu ý rằng nó loại trừ tất cả các chữ cái nước ngoài như é, è, à, ï.

Nếu bạn muốn áp dụng giới hạn từ 3 đến 30 ký tự cho mỗi từ riêng lẻ, Jens regexp sẽ thực hiện công việc.


-2
var name = document.getElementById('login_name').value; 
if ( name.length < 4  && name.length > 30 )
{
    alert ( 'Name length is mismatch ' ) ;
} 


var pattern = new RegExp("^[a-z\.0-9 ]+$");
var return_value = var pattern.exec(name);
if ( return_value == null )
{
    alert ( "Please give valid Name");
    return false; 
} 
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.