Hel*_*nar 107 regex validation
出于网站验证的目的,我需要名字和姓氏验证.
对于名字,它应该只包含字母,可以是几个空格,没有字母,最少3个字符和前30个字符的单词.不应验证空字符串.即:
Jason,jason,jason smith,jason smith,JASON,Jason smith,jason Smith,jason SMITH
对于姓氏,它应该是一个单词,只有字母,至少3个字符和前30个字符.不应验证空字符串.IE:lazslo,Lazslo,LAZSLO
mač*_*ček 169
/^[a-z ,.'-]+$/i
/^[a-zA-Zàáâäãå????èéêë??ìíîï??òóôöõøùúûü??ÿý??ñç?šžÀÁÂÄÃÅ?????ÈÉÊËÌÍÎÏ???ÒÓÔÖÕØÙÚÛÜ??ŸÝ??ÑßÇŒÆ?ŠŽ?ð ,.'-]+$/u
Sjo*_*erd 72
您对名字和姓氏的格式做出错误的假设.除了检查它是否为空之外,最好不要验证名称.
Cri*_*ero 24
在完成所有这些答案之后,我找到了一种方法来构建一个支持大多数语言的小型正则表达式,并且只允许单词字符.它甚至支持一些特殊字符,如连字符,空格和撇号.我在python中测试过它支持下面的字符:
^[\w'\-,.][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
Run Code Online (Sandbox Code Playgroud)
支持的字符:
abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ'
???
??????Zàáâäãå????èéêë??ìíîï??òóôöõøùúûü??
ÿý??ñç?šžÀÁÂÄÃÅ?????ÈÉÊËÌÍÎÏ??
?ÒÓÔÖÕØÙÚÛÜ??ŸÝ??ÑßÇŒÆ?ŠŽ.-
ñÑâê?????????????
????????? ?????? ??
Run Code Online (Sandbox Code Playgroud)
Ste*_*zey 15
我已经搜索,搜索,播放和播放它虽然不完美,但它可以帮助其他人尝试验证作为一个变量提供的名字和姓氏.
就我而言,该变量是$ 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
Run Code Online (Sandbox Code Playgroud)
我自己在学习RegEx,但我确实对RegEx buddy提供的代码有解释.
这里是:
在字边界处断言位置«\ b»
匹配下面的正则表达式并将其匹配捕获到反向引用号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}之间范围内的单个字符»
根据需要尽可能多次回馈(贪婪)«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}之间范围内的单个字符»
根据需要尽可能多次回馈(贪婪)«1,30}»
匹配列表中的单个字符" - "«[ - ] {0,1}»
在零和一次之间,尽可能多次,根据需要回馈(贪婪)«{0,1}»
或者匹配下面的正则表达式3(如果这个匹配不匹配则整个组失败)«[az] {1,2} [ - \'] {1} [AZ] {1} [az] {1,30} »
匹配"a"和"z"«[az] {1,2}之间范围内的单个字符»
根据需要尽可能多地回馈一到两次(贪婪)«{1,2}»
匹配""和"'"«[ - \'] {1}之间范围内的单个字符»
正好1次«{1}»
匹配"A"和"Z"«[AZ] {1}之间范围内的单个字符
正好1次«{1}»
匹配"a"和"z"«[az] {1,30}之间范围内的单个字符»
根据需要尽可能多次回馈(贪婪)«1,30}»
我知道这个验证完全假设填写表格的每个人都有一个西方名字,这可能会消除世界上绝大多数人.但是,我觉得这是朝着正确方向迈出的一步.也许这个正则表达式对于大师来说太简单了,或者可能还有一些其他原因导致我无法在搜索中找到上述代码.我花了太长时间试图弄清楚这一点,你可能会注意到如果你看下面我的测试名称,我的思绪是多么模糊.
我在以下名称上测试了代码,结果在每个名称右侧的括号中.
如果您有基本名称,则上述代码必须有多于五个,这与我在测试期间使用的类似,此代码可能适合您.
如果您有任何改进,请告诉我.我刚刚处于早期阶段(最初几个月找出RegEx.
谢谢,祝你好运,史蒂夫
小智 14
今天是个好日子.
我创建了一个自定义正则表达式来处理名称:
我尝试了这些类型的名字,发现工作完美
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看起来像这样:
^([a-zA-Z]{2,}\s[a-zA-z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)
Run Code Online (Sandbox Code Playgroud)
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 -)") ]
Run Code Online (Sandbox Code Playgroud)
请注意双\\for escape charactors
对于那些不熟悉RegEx的人,我想我会包含一个解释.
^ (行的开头)
[a-zA-Z] {2,} (除了具有至少两个字符的名称)
\ s (将查找名称和姓氏之间的空格)
[a-zA-Z] {1 ,} (至少需要1个字符)
'? - ? ('或-对于双管和带连字符的姓氏的可能性)
[a-zA-Z] {2,} (除了至少有两个字符的名字)
\ s? (另一个空格的可能性)
([a-zA-Z] {1,})?*(第二姓的可能性)<*br />
希望这对您的项目有所帮助.
亲切的问候
Francois Muller
Jen*_*ens 10
名字是
"([a-zA-Z]{3,30}\s*)+"
Run Code Online (Sandbox Code Playgroud)
如果你需要整个名字部分短于30个字母,我认为你需要单独检查.表达式".{3,30}"应该这样做.
您的姓氏要求将转化为
"[a-zA-Z]{3,30}"
Run Code Online (Sandbox Code Playgroud)
但你应该检查这些.有很多姓氏包含空格.
这个正则表达式对我有用(在 Angular 8 中使用):
([a-zA-Z',.-]+( [a-zA-Z',.-]+)*){2,30}
Run Code Online (Sandbox Code Playgroud)
如果有以下情况,则无效:-
- 名称的任何空格开头或结尾
- 得到符号例如@
- 小于 2 或大于 30
示例无效名字(空格)
示例有效名字:
正如马塞克所说:
别忘了这样的名字:
Mathias d'Arras
马丁路德金.
Hector Sausage-Hausen
并删除像:
..Mathias
小马丁,小 -
这将涵盖更多案例:
^([a-z]+[,.]?[ ]?|[a-z]+['-]?)+$
Run Code Online (Sandbox Code Playgroud)
阅读几乎所有高投票的帖子(只有一些是好的)。在详细了解问题并进行研究后,以下是严格的正则表达式:
1)。^[A-Z][a-z]*(([,.] |[ '-])[A-Za-z][a-z]*)*(\.?)$
Z与线程中某些人所做的假设相反,名称是允许的。Some-Foobarbaz-name, Some foobarbaz-Name)、撇号(David D'Costa, David D'costa, David D'costa R'Costa p'costa)、句点(Dr. L. John, Robert Downey Jr., Md. K. P. Asif)和逗号(Martin Luther, Jr.)。John sTeWaRT,,,允许: ,,您JOHN STEWART可以轻松修改此条件。Md. KP AsifJohn Stewart PhDJohn StewartJohn stewartMd. K P Asif如果您还想允许使用类似Queen Elizabeth 2或 的名称Henry IV:
2)。^[A-Z][a-z]*(([,.] |[ '-])[A-Za-z][a-z]*)*([.]?| (-----)| [1-9][0-9]*)$
替换-----为罗马数字的正则表达式(其本身很长),或者您可以使用基于 KISS 哲学的替代正则表达式[IVXLCDM]+(此处I, V, X, ... 以任何随机顺序都将满足正则表达式)。
我个人建议使用这个正则表达式:
3)。请随意在此处^[A-Z][a-z]*(([,.] |[ '-])[A-Za-z][a-z]*)*(\.?)( [IVXLCDM]+)?$
尝试此正则表达式并根据您的选择进行任何修改。
我提供了严格的正则表达式,它涵盖了我在研究中发现的所有可能的名称,没有错误。修改这些正则表达式以放宽一些不需要的限制。
[更新 - 2022 年 3 月]
这里还有 4 个正则表达式:
^[A-Za-z]+(([,.] |[ '-])[A-Za-z]+)*([.,'-]?)$
^((([,.'-]| )(?<!( {2}|[,.'-]{2})))*[A-Za-z]+)+[,.'-]?$
^( ([A-Za-z,.'-]+|$))+|([A-Za-z,.'-]+( |$))+$
^(([ ,.'-](?<!( {2}|[,.'-]{2})))*[A-Za-z])+[ ,.'-]?$
自从我回顾这 4 个正则表达式以来已经有一段时间了,所以我忘记了它们的规格。与前面的不同,这 4 个正则表达式并不严格,但可以很好地完成工作。这些正则表达式区分名称的 3 个部分:英文字母、空格和特殊字符。您需要这 4 个中的哪一个取决于您对以下问题的回答(是/否):
注意:名称验证应该仅作为警告,而不是名称应该满足的必要条件,因为没有固定的命名模式,如果有的话,它可以在一夜之间改变,因此,您遇到的任何严格的正则表达式都将在将来的某个地方变得过时。
我没有发现任何对我有用的答案,因为用户可以选择非英语名称,而简单的正则表达式没有帮助。事实上,找到适用于所有语言的正确表达方式实际上非常困难。
\n相反,我选择了一种不同的方法,并否定了所有不应该出现在有效匹配名称中的字符。下面的模式否定数字、特殊字符、控制字符和\'\\\'、\'/\'
\n最终正则表达式\n不带标点符号:["] [\'] [,] [.] 等:
\n^([^\\p{N}\\p{S}\\p{C}\\p{P}]{2,20})$\nRun Code Online (Sandbox Code Playgroud)\n带标点符号:
\n^([^\\p{N}\\p{S}\\p{C}\\\\\\/]{2,20})$\nRun Code Online (Sandbox Code Playgroud)\n这样,所有这些名称都是有效的:
\nalex junior\n\xe6\xb2\x90\xe5\xae\xb8\nNick\nSarah\'s Jane ---> with punctuation support\n\xd7\x91\xd7\x99\xd7\x9e\xd7\x9e\xd7\x94\n\xd8\xad\xd9\x82\xdb\x8c\xd9\x82\xd8\xaa\n\xd0\x92\xd0\xb8\xd0\xba\xd1\x82\xd0\xbe\xd1\x80\xd0\xb8\xd1\x8f\nRun Code Online (Sandbox Code Playgroud)\n并且以下名称无效:
\n Maria\nk\n\xd9\xa1\xd9\xa1\xd9\xa1\xd9\xa1\xd9\xa1\n123John\nRun Code Online (Sandbox Code Playgroud)\n这意味着所有不包含数字字符、表情符号、\\ 且长度在 2-20 个字符之间的名称都是允许的。如果您想向排除列表添加更多字符,您可以编辑上述正则表达式。
\n要获取有关要包含/排除的可用模式的更多信息,请查看以下内容:\n https://www.regular-expressions.info/unicode.html#prop
\n这里投票最高的答案有一个问题,推荐使用这个正则表达式:
/^[a-z ,.'-]+$/i
Run Code Online (Sandbox Code Playgroud)
它只需要空格作为有效名称!
我认为最好的解决方案是在开头添加负面期待:
/^(?!\s)([a-z ,.'-]+)$/i
Run Code Online (Sandbox Code Playgroud)
我用:
/^(?:[\u00c0-\u01ffa-zA-Z'-]){2,}(?:\s[\u00c0-\u01ffa-zA-Z'-]{2,})+$/i
Run Code Online (Sandbox Code Playgroud)
并使用其他方法测试 maxlength
为了简单起见,您可以使用:
(.*)\s(.*)
Run Code Online (Sandbox Code Playgroud)
我喜欢的是,姓氏总是在第一个名字之后,所以如果您要将这些匹配的组输入数据库,名称是John M. Smith,那么第一组将是John M. ,第二组将是史密斯.
我正在开发可验证国际护照(ICAO)的应用程序。我们仅支持英文字符。虽然大多数外来国家字符可以用拉丁字母中的字符表示,例如èby e,但有些国家字符需要一个额外的字母来表示它们,例如德国变音符号,要求在字母上添加“ e”例如äby ae。
这是我们使用的名字和姓氏的JavaScript正则表达式:
/^[a-zA-Z '.-]*$/
Run Code Online (Sandbox Code Playgroud)
国际护照上的最大字符数为31。我们使用maxlength =“ 31”来更好地显示错误消息,而不是将其包含在正则表达式中。
这是AngularJS 1.6中的代码片段,其中包含表单和错误处理:
/^[a-zA-Z '.-]*$/
Run Code Online (Sandbox Code Playgroud)
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);Run Code Online (Sandbox Code Playgroud)
.has-error p[ng-message] {
color: #bc111e;
}
.tip {
color: #535f67;
}Run Code Online (Sandbox Code Playgroud)
最简单的方法。只需检查近2个字。
/^[^\s]+( [^\s]+)+$/
Run Code Online (Sandbox Code Playgroud)
有效名称
没有有效名称
我已经尝试了此页面上的几乎所有内容,然后我决定修改最终效果最佳的投票最多的答案。只需匹配所有语言并包含.,-' 字符。
这里是:
/^[\p{L} ,.'-]+$/u
Run Code Online (Sandbox Code Playgroud)