It looks like my solution can easily handle that
```
^(?=([A-ZÀ-ÝŐŰẞŒ]|([a-zß-ÿőűœ][ '])))(?=(?![a-zß-ÿőűœ]+[A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[A-ZÀ-ÝŐŰẞŒ][A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[- '][- ']))[A-ZÀ-ÝŐŰẞŒß-ÿőűœa-z- ']{2,}([a-zß-ÿőűœ]|(, Jr.))$
```
<!-- begin snippet: js hide: false console: true babel: false babelPresetReact: false babelPresetTS: false -->
<!-- language: lang-js -->
function myFunction() {
const pattern = "^(?=([A-ZÀ-ÝŐŰẞŒ]|([a-zß-ÿőűœ][ '])))(?=(?![a-zß-ÿőűœ]+[A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[A-ZÀ-ÝŐŰẞŒ][A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[- '][- ']))[A-ZÀ-ÝŐŰẞŒß-ÿőűœa-z- ']{2,}([a-zß-ÿőűœ]|(, Jr.))$";
var regex = new RegExp(pattern, 'gm');
var a = document.getElementById("myText");
var b = a.value;
var c = regex.test(b);
var d = document.getElementById("result") ;
d.innerHTML = "Result:";
if(b != ""){
if(c){
d.innerHTML += " passed";
}
else{
d.innerHTML += " failed";
}
}
else{
return
}
}
<!-- language: lang-css -->
input[type=text] {
width: 99%;
padding: 4px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 4px;
border: none;
cursor: pointer;
width: 25%;
}
button:hover {
opacity: 0.8;
}
<!-- language: lang-html -->
<h2>Name Validation Regex Pattern </h2>
<div class="container">
<label for="name"><b>Name</b></label>
<input type="text" id="myText" placeholder="Enter Your Name" name="name" value="">
</div>
<div class="container">
<button onclick="myFunction()">Try it</button>
<p id="result"> Result: </p>
</div>
</div>
<!-- end snippet -->
Here is my solution and let's compare all the top solutions here
/^(?=([A-ZÀ-ÝŐŰẞŒ]|([a-zß-ÿőűœ][ '])))(?=(?![a-zß-ÿőűœ]+[A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[A-ZÀ-ÝŐŰẞŒ][A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[- '][- ']))[A-ZÀ-ÝŐŰẞŒß-ÿőűœa-z- ']{2,}([a-zß-ÿőűœ]|(, Jr.))$/
|Name|This Sol-n|maček|CristianGuerrero|Francois Muller|John Boga|Steve Kinzey|
|:--------|:----|:----|:----|:----|:----|:----|
|this is NOT a good regex expression |fail|passed|passed|fail|passed|fail|
| |fail|passed|passed|fail|passed|fail|
|**'''''''''''''''''''**|fail|passed|passed|fail|passed|fail|
|**-------------------**|fail|passed|passed|fail|passed|fail|
|__***************__|fail|fail|fail|fail|fail|fail|
|**###### #######**|fail|fail|fail|fail|fail|fail|fail|
|**!!! !!! !!!**|fail|fail|fail|fail|fail|fail|
|**my@email.com**|fail|fail|fail|fail|fail|fail|
|**s-T**eve Smith|fail|passed|passed|fail|passed|passed Teve..|
|**s**Teve **s**Mith|fail|passed|passed|passed|passed|fail|
|STEVE SMITH |fail|passed|passed|passed|passed|fail|
|Stev**3** Smith|fail|fail|fail|fail|fail|fail|
|S**T**eve Smith|fail|passed|passed|passed|passed|fail|
|Steve S**M**ith|fail|passed|passed|passed|passed|fail|
|Steve Sm**1**th|fail|fail|fail|fail|fail|passed Steve Sm|
|Joh**n (extra space) S**mith|fail|passed|passed|fail|passed|fail|
|**'J**ohn Smith |fail|passed|passed|fail|fail|passed|passed w.o.'|
|John Smit**h-** |fail|passed|passed|passed w.o. -|passed|passed|passed|
|Ti O **D**|fail|passed|passed|fail|passed|fail|
|**d'Are to Beaware** |passed|passed|passed|fail|passed|passed|passed|
|**Jo Blow** |passed|passed|passed|passed|passed|passed|
|**Hyoung Kyoung Wu** |passed|passed|passed|passed|passed|fail|
|**Mike O'Neal** |passed|passed|passed|passed|passed|passed w.o. O|
|**Steve Johnson-Smith** |passed|passed|passed|passed|passed|passed|
|**Jozef-Schmozev Hiemdel** |passed|passed|passed|fail|passed|passed|
|**O Henry Smith** |passed|passed|passed|fail|passed|passed w.o. O|
|**Mathais d'Arras** |passed|passed|passed|passed|passed|passed|
|**Martin Luther King Jr** |passed|passed|passed|passed|passed|passed|
|**Downtown-James Brown** |passed|passed|passed|fail|passed|passed|
|**Darren McCarty** |passed|passed|passed|passed|passed|passed|
|**An Ni** |passed|passed|passed|fail|passed|passed|
|**George De FunkMaster** |passed|passed|passed|fail|passed|passed|
|**Kurtis B-Ball Basketbal**l |passed|passed|passed|passed|passed|50%|
|**Ahmad el Jeffe** |passed|passed|passed|fail|passed|passed|
|**André Désirée Jördis** |passed|passed|passed|fail|passed|fail|
|**René Jürg** |passed|passed|passed|fail|passed|fail|
|**Esmé Adélaïde** |passed|passed|passed|fail|passed|fail|
|**Adorján Ágnes** |passed|passed|passed|fail|passed|fail|
|**Bendegúz Bertók** |passed|passed|passed|fail|passed|fail|
|**Ávg É Ñu** |passed|passed|passed|fail|passed|fail|
|**Ógl Ú Üd** |passed|passed|passed|fail|passed|fail|
|**Aarón Abrahán Aída** |passed|passed|passed|fail|passed|fail|
|**Íñigo Jerónima** |passed|passed|passed|fail|passed|fail|
|**Martin Luther King, Jr.**|passed|passed|passed|passed w.o.,Jr.|passed|passed w.o.,Jr.|
<!-- begin snippet: js hide: false console: true babel: false babelPresetReact: false babelPresetTS: false -->
<!-- language: lang-js -->
function myFunction() {
const pattern = "^(?=([A-ZÀ-ÝŐŰẞŒ]|([a-zß-ÿőűœ][ '])))(?=(?![a-zß-ÿőűœ]+[A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[A-ZÀ-ÝŐŰẞŒ][A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[- '][- ']))[A-ZÀ-ÝŐŰẞŒß-ÿőűœa-z- ']{2,}([a-zß-ÿőűœ]|(, Jr.))$";
var regex = new RegExp(pattern, 'gm');
var a = document.getElementById("myText");
var b = a.value;
var c = regex.test(b);
var d = document.getElementById("result") ;
d.innerHTML = "Result:";
if(b != ""){
if(c){
d.innerHTML += " passed";
}
else{
d.innerHTML += " failed";
}
}
else{
return
}
}
<!-- language: lang-css -->
input[type=text] {
width: 99%;
padding: 4px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 4px;
border: none;
cursor: pointer;
width: 25%;
}
button:hover {
opacity: 0.8;
}
<!-- language: lang-html -->
<h2>Name Validation Regex Pattern </h2>
<div class="container">
<label for="name"><b>Name</b></label>
<input type="text" id="myText" placeholder="Enter Your Name" name="name" value="">
</div>
<div class="container">
<button onclick="myFunction()">Try it</button>
<p id="result"> Result: </p>
</div>
</div>
<!-- end snippet -->