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 -->
Try this one
```
^[^- '.](?=(?![A-Z]?[A-Z]))(?=(?![a-z]+[A-Z]))(?=(?!.*[A-Z][A-Z]))(?=(?!.*[- '][- '.]))(?=(?!.*[.][-'.]))[A-Za-z- '.]{1,}$
```
There is also an interactive [Demo][1] of this pattern available at an external website.
[1]: https://regex101.com/r/81xsIE/1/
Edited:
New one supporting most of European languages:
```
^(?=([A-ZÀ-ÝŐŰẞŒ]|([a-zß-ÿőűœ][ '])))(?=(?![a-zß-ÿőűœ]+[A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[A-ZÀ-ÝŐŰẞŒ][A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[- '][- ']))[A-ZÀ-ÝŐŰẞŒß-ÿőűœa-z- ']{2,}([a-zß-ÿőűœ]|(, Jr.))$
```
|Name|Result|
|:-----------|:---------------------------------|
|yyTyue Tgshh |fail: starts with a small letter|
|CxCx5C5C |fail: numbers|
|STEVE SMITH |fail: all capital ...|
|Stev3 Smith |fail: 3 at the end of the name|
|STeve Smith |fail: ST|
|Steve SMith |fail: SM|
|Steve Sm1th |fail: 1 instead of i|
|John Smith |fail: extra space)|
|'John Smith |fail: ' at the beginning|
|John Smith- |fail: - at the end|
|**d'Are to Beaware** |passed 100%|
|**Jo Blow** |passed 100%|
|**Hyoung Kyoung Wu** |passed 100%|
|**Mike O'Neal** |passed 100%|
|**Steve Johnson-Smith** |passed 100%|
|**Jozef-Schmozev Hiemdel** |passed 100%|
|**O Henry Smith** |passed 100%|
|**Mathais d'Arras** |passed 100%|
|**Martin Luther King Jr** |passed 100%|
|**Downtown-James Brown** |passed 100%|
|**Darren McCarty** |passed 100%|
|**An Ni** |passed 100%|
|**George De FunkMaster** |passed 100%|
|**Kurtis B-Ball Basketbal**l |passed 100%|
|**Ahmad el Jeffe** |passed 100%|
|**André Désirée Jördis** |passed 100%|
|**René Jürg** |passed 100%|
|**Esmé Adélaïde** |passed 100%|
|**Adorján Ágnes** |passed 100%|
|**Bendegúz Bertók** |passed 100%|
|**Ávg É Ñu** |passed 100%|
|**Ógl Ú Üd** |passed 100%|
|**Aarón Abrahán Aída** |passed 100%|
|**Íñigo Jerónima** |passed 100%|
<!-- 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 -->