นิพจน์ทั่วไปสำหรับชื่อและนามสกุล


126

เพื่อวัตถุประสงค์ในการตรวจสอบความถูกต้องของเว็บไซต์ฉันต้องมีการตรวจสอบชื่อและนามสกุล

สำหรับชื่อแรกควรประกอบด้วยตัวอักษรเท่านั้นสามารถมีหลายคำที่มีช่องว่างและมีอักขระอย่างน้อยสามตัว แต่สูงสุดไม่เกิน 30 อักขระ ไม่ควรตรวจสอบสตริงว่าง (เช่นJason , jason , jason smith , jason smith , JASON , Jason smith , jason Smithและjason SMITH )

สำหรับนามสกุลควรเป็นคำเดียวตัวอักษรเท่านั้นโดยมีอักขระอย่างน้อยสามตัว แต่ไม่เกิน 30 อักขระ ไม่ควรตรวจสอบความถูกต้องของสตริงว่าง (เช่นlazslo , LazsloและLAZSLO )


10
ชื่อต้นอย่าง 'Jo' ล่ะ?
อา

6
เพียงแค่ข้อสังเกต: ยัติภังค์เป็นเรื่องปกติในนามสกุล ... อาจมีนามสกุลที่มีช่องว่างด้วย
tanascius

2
หมายเหตุ: regularexpressionvalidator จะละเว้นอินพุตที่ว่างเปล่าซึ่งอาจเป็นหรือไม่ใช่สิ่งที่คุณต้องการ
Hans Ke ในวันที่

4
หากเป็นไปได้เว้นแต่คุณจะมีเหตุผลที่น่าทึ่งในการกำหนดชื่อและนามสกุลให้ระบุฟิลด์ "ชื่อ" เพียงช่องเดียว kalzumeus.com/2010/06/17/…
คริส

คำตอบ:


196

อย่าลืมชื่อเช่น:

  • Mathias d'Arras
  • มาร์ตินลูเธอร์คิงจูเนียร์
  • Hector Sausage-Hausen

สิ่งนี้ควรใช้เคล็ดลับสำหรับสิ่งต่างๆเกือบทั้งหมด:

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

หรือสนับสนุนชื่อสากลด้วยยูนิโคดสุดหวาน:

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


4
ฉันจะหลีกเลี่ยงอักขระพิเศษใน regexps เหล่านี้โดยเฉพาะ.(จุดทศนิยม / จุด / จุดหยุดเต็ม) เนื่องจากเป็นสัญลักษณ์แทน regexp =)
Joel Purra

31
คุณไม่สามารถตรวจสอบความถูกต้องของอักขระประจำชาติที่เป็นไปได้ทั้งหมด ตัวอย่างเช่นอักขระฮังการีőŐűŰไม่มีอักขระโปแลนด์łŁเช่นกันไม่ต้องพูดถึงอักขระลิทัวเนียและลัตเวียจำนวนหนึ่ง แทนที่จะพยายามหาไลบรารีที่แปลงอักขระที่แปลกใหม่ให้เป็นเวอร์ชันที่ไม่เน้นเสียงที่เหมาะสมจากนั้นเขียน/^[a-z ,.'-]+$/iregexp
gaborsch

70
ดังนั้นจึง陳大文ไม่ใช่ชื่อที่ถูกต้องที่นี่?
Alvin Wong

16
สำหรับ Unicode ใช้/^[\p{L}'][ \p{L}'-]*[\p{L}]$/uอย่างไรก็ไม่น่าให้อภัย
Frederik Krautwald

4
AZ ไม่จำเป็นต้องรวมอยู่ในตัวอย่างต้นฉบับเนื่องจากตัวปรับแต่ง i หลังนิพจน์หมายถึงกรณีที่ละเว้น
mhanney

74

คุณตั้งสมมติฐานผิด ๆ เกี่ยวกับรูปแบบของชื่อและนามสกุล อาจเป็นการดีกว่าที่จะไม่ตรวจสอบความถูกต้องของชื่อเลยนอกจากการตรวจสอบว่าว่างเปล่า


ควรเป็นความคิดเห็น
Dementic

32

หลังจากทำตามคำตอบทั้งหมดนี้แล้วฉันพบวิธีสร้างนิพจน์เล็ก ๆ ที่รองรับภาษาส่วนใหญ่และอนุญาตให้ใช้เฉพาะอักขระคำเท่านั้น มันยังรองรับอักขระพิเศษบางตัวเช่นยัติภังค์ช่องว่างและเครื่องหมายอะพอสทรอฟี ฉันได้ทดสอบใน python แล้วและรองรับอักขระด้านล่าง:

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

รองรับอักขระ:

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

2
จากคำตอบทั้งหมดคำตอบนี้ใช้งานได้อย่างมีเสน่ห์โดยใช้ ng 4
Deniss M.

1
regex ของคุณล้มเหลวในสตริง 2 อักขระ ฉันคิดว่าสิ่งนี้แก้ไขได้แล้ว^[\w'\-,.]*[^_!¡?÷?¿\/\\+=@#$%ˆ&*(){}|~<>;:[\]]*$
TKA

รองรับอักขระประจำชาติ แต่ไม่รองรับในตำแหน่งแรก ฉันจะเปลี่ยนนิพจน์เป็น^[^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
TOUDIdel

18

ฉันได้สร้าง regex ที่กำหนดเองเพื่อจัดการกับชื่อ:

ฉันได้ลองใช้ชื่อประเภทนี้แล้วและพบว่าใช้งานได้ดี

  1. จอห์นสมิ ธ
  2. John D'Largy
  3. John Doe-Smith
  4. John Doe Smith
  5. Hector Sausage-Hausen
  6. Mathias d'Arras
  7. มาร์ตินลูเธอร์คิง
  8. อ้ายหว่อง
  9. เจ้าช้าง
  10. Alzbeta Bara

RegEx ของฉันมีลักษณะดังนี้:

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

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 -)") ]

โปรดสังเกตคู่\\สำหรับอักขระ Escape

สำหรับพวกคุณที่เพิ่งเริ่มใช้ RegEx ฉันคิดว่าฉันจะมีคำอธิบาย

^               // 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

ฉันมีการทดสอบหน่วยที่ทดสอบชื่อหลายชื่อแล้วก็หลายสิ่งที่ไม่ใช่ชื่อ รายการที่ไม่ใช่ชื่อมี 'โทเค็นการทดสอบ' เป็นรายการแรก ตรงกับที่
Rob

เกือบจะเป็นสิ่งที่ฉันกำลังมองหา ฉันเดา (อาจจะผิด) ว่าคุณเป็นคนฝรั่งเศส และมีกรณีหนึ่งที่คุณพบในภาษาฝรั่งเศสไม่ได้: ชื่อที่แต่งขึ้นเช่น Jean-Pierre, Marie-Charlotte เป็นต้น ... ฉันยังใหม่กับ reg exp แต่ฉันเดาว่า a -? เช่นเดียวกับที่คุณทำกับนามสกุลระหว่าง 2 คำแรกสามารถทำงานได้
Linpter

สวัสดี Linpter ไม่ใช่ฝรั่งเศส แต่ฉันมีชื่อภาษาฝรั่งเศส ใช่. ฉันยังไม่ได้ทดสอบ แต่คุณควรจะเพิ่ม - ใน [] แรกได้ดังนั้นให้เปลี่ยน: ^ ([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

ฉันได้ค้นหาและค้นหาและเล่นและเล่นกับมันและแม้ว่ามันจะไม่สมบูรณ์แบบ แต่ก็อาจช่วยให้ผู้อื่นพยายามตรวจสอบความถูกต้องของชื่อและนามสกุลที่ให้ไว้เป็นตัวแปรเดียว

ในกรณีของฉันตัวแปรนั้นคือ $ name

ฉันใช้รหัสต่อไปนี้สำหรับ PHP ของฉัน:

    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

ฉันกำลังเรียนรู้ RegEx ด้วยตนเอง แต่ฉันมีคำอธิบายเกี่ยวกับรหัสตามที่เพื่อน RegEx ให้มา
นี่คือ:

ยืนยันตำแหน่งที่ขอบเขตของคำ« \ b »

จับคู่นิพจน์ทั่วไปด้านล่างและจับคู่นิพจน์ดังกล่าวเป็น backreference หมายเลข 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} »

ระหว่าง 2 ถึง 5 ครั้งหลาย ๆ ครั้งให้ได้ตามต้องการ (โลภ) « {2,5} »

*ฉันต้องการความช่วยเหลือบางอย่างที่นี่ด้วยการทำความเข้าใจกับความซับซ้อนของหมายเหตุนี้ *

หมายเหตุ: ฉันทำซ้ำกลุ่มการจับภาพเอง กลุ่มจะจับเฉพาะการทำซ้ำครั้งสุดท้าย วางกลุ่มการจับภาพไว้รอบ ๆ กลุ่มที่ทำซ้ำเพื่อจับภาพการวนซ้ำทั้งหมด «{2,5}»

จับคู่นิพจน์ทั่วไปด้านล่างอย่างใดอย่างหนึ่ง (พยายามใช้ทางเลือกถัดไปถ้าอันนี้ล้มเหลวเท่านั้น) « [AZ] {1} [az] {1,30} [-] {0,1} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ A” และ“ Z” « [AZ] {1} »

ตรง 1 ครั้ง« {1} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ a” และ“ z” « [az] {1,30} »

ระหว่างหนึ่งถึง 30 ครั้งให้มากที่สุดเท่าที่จะเป็นไปได้โดยให้คืนตามต้องการ (โลภ) « {1,30} »

จับคู่อักขระเดี่ยวที่มีอยู่ในรายการ“ -” « [-] {0,1} »

ระหว่างศูนย์ถึงหนึ่งครั้งให้มากที่สุดเท่าที่จะทำได้โดยให้คืนตามต้องการ (โลภ) « {0,1} »

หรือจับคู่นิพจน์ทั่วไปหมายเลข 2 ด้านล่าง (พยายามใช้ทางเลือกถัดไปหากไม่สามารถใช้งานได้) « [AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ A” และ“ Z” « [AZ] {1} »

ตรง 1 ครั้ง« {1} »

จับคู่อักขระเดี่ยวที่มีอยู่ในรายการด้านล่าง« [- \ '] {1} »

ตรง 1 ครั้ง« {1} »

หนึ่งในอักขระ“ -” « - » A 'อักขระ« \' »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ A” และ“ Z” « [AZ] {0,1} »

ระหว่างศูนย์ถึงหนึ่งครั้งให้มากที่สุดเท่าที่จะทำได้โดยให้คืนตามต้องการ (โลภ) « {0,1} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ a” และ“ z” « [az] {1,30} »

ระหว่างหนึ่งถึง 30 ครั้งให้มากที่สุดเท่าที่จะเป็นไปได้โดยให้คืนตามต้องการ (โลภ) « {1,30} »

จับคู่อักขระเดี่ยวที่มีอยู่ในรายการ“ -” « [-] {0,1} »

ระหว่างศูนย์ถึงหนึ่งครั้งให้มากที่สุดเท่าที่จะทำได้โดยให้คืนตามต้องการ (โลภ) « {0,1} »

หรือจับคู่นิพจน์ทั่วไปหมายเลข 3 ด้านล่าง (ทั้งกลุ่มจะล้มเหลวหากไม่สามารถจับคู่ได้) « [az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ a” และ“ z” « [az] {1,2} »

ระหว่างหนึ่งถึง 2 ครั้งให้มากที่สุดเท่าที่จะทำได้โดยให้คืนตามต้องการ (โลภ) « {1,2} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“” และ“ '” « [- \'] {1} »

ตรง 1 ครั้ง« {1} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ A” และ“ Z” « [AZ] {1} »

ตรง 1 ครั้ง« {1} »

จับคู่อักขระเดี่ยวในช่วงระหว่าง“ a” และ“ z” « [az] {1,30} »

ระหว่างหนึ่งถึง 30 ครั้งให้มากที่สุดเท่าที่จะเป็นไปได้โดยให้คืนตามต้องการ (โลภ) « {1,30} »

ฉันรู้ว่าการตรวจสอบความถูกต้องนี้ถือว่าทุกคนที่กรอกแบบฟอร์มมีชื่อฝรั่งและนั่นอาจกำจัดคนส่วนใหญ่ในโลกออกไป อย่างไรก็ตามฉันรู้สึกว่านี่เป็นขั้นตอนในทิศทางที่เหมาะสม บางทีนิพจน์ทั่วไปนี้อาจจะธรรมดาเกินไปสำหรับผู้เชี่ยวชาญที่จะพูดง่ายๆหรืออาจมีเหตุผลอื่นที่ทำให้ฉันไม่พบโค้ดด้านบนในการค้นหาของฉัน ฉันใช้เวลานานเกินไปในการพยายามคิดออกคุณอาจสังเกตได้ว่าจิตใจของฉันมีหมอกแค่ไหนถ้าคุณดูชื่อการทดสอบของฉันด้านล่าง

ฉันทดสอบรหัสกับชื่อต่อไปนี้และผลลัพธ์อยู่ในวงเล็บทางด้านขวาของแต่ละชื่อ

  1. สตีฟสมิ ธ (ล้มเหลว)
  2. Stev3 Smith (ล้มเหลว)
  3. สตีฟสมิ ธ (ล้มเหลว)
  4. Steve SMith (ล้มเหลว)
  5. Steve Sm1th (ส่งต่อ Steve Sm)
  6. d'Are to Beaware (ส่งต่อ Are to Beaware)
  7. Jo Blow (ผ่าน)
  8. Hyoung Kyoung Wu (ผ่าน)
  9. Mike O'Neal (ผ่าน)
  10. Steve Johnson-Smith (ผ่าน)
  11. Jozef-Schmozev Hiemdel (ผ่าน)
  12. O Henry Smith (ผ่าน)
  13. Mathais d'Arras (ผ่าน)
  14. Martin Luther King Jr (ผ่าน)
  15. Downtown-James Brown (ผ่าน)
  16. Darren McCarty (ผ่าน)
  17. George De FunkMaster (ผ่าน)
  18. Kurtis B-Ball Basketball (ผ่าน)
  19. Ahmad el Jeffe (ผ่าน)

หากคุณมีชื่อพื้นฐานต้องมีมากกว่าหนึ่งถึงห้าเพื่อให้โค้ดด้านบนทำงานซึ่งคล้ายกับที่ฉันใช้ในระหว่างการทดสอบรหัสนี้อาจเหมาะสำหรับคุณ

หากคุณมีการปรับปรุงใด ๆ โปรดแจ้งให้เราทราบ ฉันเพิ่งอยู่ในช่วงเริ่มต้น (ไม่กี่เดือนแรกของการหา RegEx

ขอบคุณและโชคดีสตีฟ


1
สิ่งที่ต้องการ "The Fourth" หรือ "IV" จะใช้ได้กับสิ่งนี้หรือไม่?
majidarif

11

ชื่อจริงจะเป็น

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

หากคุณต้องการให้ส่วนของชื่อทั้งหมดสั้นกว่า 30 ตัวอักษรฉันคิดว่าคุณต้องตรวจสอบแยกกัน การแสดงออก".{3,30}"ควรทำอย่างนั้น

ข้อกำหนดนามสกุลของคุณจะแปลเป็น

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

แต่คุณควรตรวจสอบสิ่งเหล่านี้ นามสกุลมีช่องว่างมากมาย


ตรวจสอบช่องว่างระหว่าง?
Y_Y

2
สิ่งที่เกี่ยวกับโอคอนเนอร์ ? ต้องรวมเครื่องหมายวรรคตอนด้วย
นักบินอวกาศ

1
ค่อนข้างไม่สมบูรณ์ ชื่อแรกอาจเป็น "Jean-Claude" พร้อมยัติภังค์ นามสกุลอาจเป็น "D'arc" พร้อมเครื่องหมายคำพูด นอกจากนี้ถ้า "François" เป็นชื่อแรกล่ะ?
บาร์ต

1
แล้ว "อัล" ล่ะ? ชื่อจริงที่ถูกต้อง แค่สองตัวอักษร ชื่อจีนรัสเซียฮินดีล่ะ ชื่อในยุโรปล่ะ?
Christian Hujer

สิ่งนี้จะใช้ไม่ได้กับชื่อที่ไม่ใช่ภาษาอังกฤษหรือ (ไม่ใช่ภาษาละติน) จำนวนมาก
oldboy

7

ดังที่mačekกล่าวว่า:

อย่าลืมชื่อเช่น:

Mathias d'Arras

มาร์ตินลูเธอร์คิงจูเนียร์

Hector Sausage-Hausen

และเพื่อลบกรณีเช่น:

..Mathias

มาร์ตินคิงจูเนียร์ -

ซึ่งจะครอบคลุมกรณีอื่น ๆ :

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

ถ้าฉันต้องการจำกัดความยาวอักขระแล้วรหัสสำหรับสิ่งนั้นคืออะไร?
G.Abhisek

1
ใช่มาร์ตินลูเธอร์คิงจูเนียร์กลับมาอีกครั้งและคิงเฮนรี่ที่แปดก็เช่นกัน
Steve Kinzey

7

ฉันกำลังทำงานกับแอพที่ตรวจสอบหนังสือเดินทางระหว่างประเทศ (ICAO) เรารองรับเฉพาะตัวอักษรภาษาอังกฤษ ในขณะที่อักขระต่างชาติส่วนใหญ่สามารถแสดงได้ด้วยอักขระในตัวอักษรละตินเช่นè by e แต่มีอักขระประจำชาติหลายตัวที่ต้องใช้ตัวอักษรพิเศษเพื่อแสดงเช่นเครื่องหมายอุมเลาท์ภาษาเยอรมันซึ่งต้องเพิ่ม 'e' ในตัวอักษร เช่นä by ae.

นี่คือ JavaScript Regex สำหรับชื่อและนามสกุลที่เราใช้:

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

จำนวนอักขระสูงสุดในหนังสือเดินทางระหว่างประเทศคือ 31ตัว เราใช้ maxlength = "31" เพื่อปรับปรุงข้อความแสดงข้อผิดพลาดของคำแทนที่จะรวมไว้ในนิพจน์ทั่วไป

นี่คือตัวอย่างจากโค้ดของเราใน AngularJS 1.6 พร้อมรูปแบบและการจัดการข้อผิดพลาด:

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 คุณไม่ได้ใช้ Regex ของฉัน ใช้สิ่งนี้: / ^ [a-zA-Z '.-] * $ /
Alexander Burakevych

5

ฉันใช้:

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

และทดสอบความยาวสูงสุดโดยใช้วิธีอื่น


5

regex นี้ใช้ได้สำหรับฉัน (ใช้ใน Angular 8):

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

ใส่คำอธิบายภาพที่นี่

มันจะไม่ถูกต้องหากมี: -

  1. ช่องว่างใด ๆ เริ่มต้นหรือสิ้นสุดของชื่อ
  2. มีสัญลักษณ์เช่น @
  3. น้อยกว่า 2 หรือมากกว่า 30

ตัวอย่างชื่อที่ไม่ถูกต้อง (ช่องว่าง)

ใส่คำอธิบายภาพที่นี่

ตัวอย่างชื่อจริงที่ถูกต้อง:

ใส่คำอธิบายภาพที่นี่


6
แล้ว 'BjörkGuðmundsdóttir' ล่ะ?
Mariusz Jamro

4

เพื่อความเรียบง่ายคุณสามารถใช้:

(.*)\s(.*)

สิ่งที่ฉันชอบเกี่ยวกับเรื่องนี้คือนามสกุลมักจะอยู่หลังชื่อดังนั้นหากคุณจะป้อนกลุ่มที่ตรงกันนี้ลงในฐานข้อมูลและชื่อคือ John M. Smith กลุ่มที่ 1 จะเป็น John M. และกลุ่มที่ 2 คือ Smith


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

^ ยืนยันตำแหน่งที่จุดเริ่มต้นของบรรทัด

\ p {L} จับคู่ตัวอักษรจากภาษาใดก็ได้

{2,} Quantifier - จับคู่ระหว่าง 2 และไม่ จำกัด จำนวนครั้งให้มากที่สุดเท่าที่จะทำได้โดยให้คืนตามต้องการ (โลภ)

$ ยืนยันตำแหน่งที่ท้ายบรรทัด

ดังนั้นจึงควรเป็นชื่อในภาษาใด ๆ ที่มีตัวอักษร (หรือสัญลักษณ์) อย่างน้อย 2 ตัวโดยไม่มีตัวเลขหรืออักขระอื่น ๆ


โปรดทราบว่าอักขระบางตัวเช่น "และ - ใช้ได้ในชื่อ
Mathijs Segers

1

ดังนั้นกับลูกค้าเราจึงสร้าง regex ที่บ้าคลั่งนี้:

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

1

สำหรับชื่อและนามสกุลมีเพียง 2 สิ่งที่คุณควรมองหา:

  1. ความยาว
  2. เนื้อหา

นี่คือนิพจน์ทั่วไปของฉัน:

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

1. ความยาว

ที่นี่ {3,20} จำกัดความยาวของสตริงให้อยู่ระหว่าง 3 ถึง 20 อักขระ

2. เนื้อหา

ข้อมูลระหว่างวงเล็บเหลี่ยม [A-Za-z] อนุญาตให้ใช้อักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก อนุญาตให้ใช้สัญลักษณ์ที่ตามมาทั้งหมด (- ,. )


1

นี่คือสิ่งที่ฉันใช้

regex A-Z a-z ,space and -นี้ยอมรับเฉพาะชื่อที่มีตัวอักษรขั้นต่ำจาก

ตัวอย่างชื่อ:

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

ขีด จำกัด ของอักขระของชื่อคือ 3 หากคุณต้องการเปลี่ยนแปลงให้แก้ไข {3,} เป็น {6,}

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

2
แล้วäåöÄÅÖ ฯลฯ ล่ะ? ใช้บ่อยมากในชื่อภาษาสวีเดน นามสกุล O'Conner ก็จะล้มเหลวและชื่อลำกล้องคู่ก็จะทำให้เกิดปัญหาเช่นกัน สิ่งนี้จะน่าผิดหวังมากสำหรับผู้ที่มีชื่อที่ถูกต้องเช่นนี้
เหี่ยว

สิ่งที่เกี่ยวกับเครื่องหมายวรรคตอนในชื่อเช่น O'Connor?
Fogmeister

นิพจน์ของฉันส่งคืน Michael Jordan O'Reilly Jr. เป็นชื่อที่ถูกต้อง
Steve Kinzey

0

นิพจน์ต่อไปนี้จะใช้งานได้กับภาษาใด ๆ ที่ UTF-16 รองรับและจะทำให้แน่ใจว่ามีองค์ประกอบอย่างน้อยสองรายการสำหรับชื่อ (เช่นตัวแรก + ตัวสุดท้าย) แต่จะอนุญาตให้มีชื่อกลางกี่ชื่อก็ได้

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

ในขณะที่เขียนนี้ดูเหมือนว่าไม่มีคำตอบอื่นใดตรงตามเกณฑ์ทั้งหมด แม้แต่^\p{L}{2,}$ซึ่งใกล้เคียงที่สุดก็สั้นเพราะมันจะจับคู่อักขระ "ล่องหน" ด้วยเช่นU+FEFF(Zero Width No-Break Space)


ไม่ผ่าน javascript สำหรับregexr.com 1) เตือนว่าอาจไม่รองรับคุณสมบัติ Unicode ในทุกเบราว์เซอร์ 2) ยังอนุญาตให้ใช้ตัวเลขใน regex ตัวอย่าง: michael dimmittsasd2123123
Michael Dimmitt

0

ลองใช้วิธีแก้ปัญหาเหล่านี้เพื่อความเข้ากันได้สูงสุดดังที่ฉันได้โพสต์ไว้ที่นี่ :

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>



-1

ฟังก์ชั่นง่ายๆโดยใช้ preg_match ใน 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

หากคุณต้องการให้ชื่อเต็มมีความยาวระหว่าง 3 ถึง 30 อักขระโดยไม่มีข้อ จำกัด สำหรับคำแต่ละคำให้ลองทำดังนี้:

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

ระวังว่ามันไม่รวมตัวอักษรต่างประเทศทั้งหมดว่าé, è, à, ï

หากคุณต้องการให้ขีด จำกัด 3 ถึง 30 อักขระใช้กับแต่ละคำ Jens regexp จะทำงาน


-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; 
} 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.