第一个和最后一个名字的正则expression式

对于网站validation的目的,我需要名字和姓氏validation。

名字只能包含字母,可以是几个空格,没有字母,最less3个字符,前30个字符。 空string不应该被validation。 即:

杰森,杰森,杰森·史密斯,杰森·史密斯,贾森·史密斯,杰森·史密斯

对于姓氏,它应该是一个单词,只有字母和至less3个字符和前30个字符。 空string不应该被validation。 IE:lazslo,Lazslo,LAZSLO

不要忘记像这样的名字:

  • Mathias d'Arras
  • 马丁·路德·金
  • 赫克托香肠 – 豪森

这应该为大多数事情做窍门:

/^[az ,.'-]+$/i

或者用超级甜美的unicode支持国际名字:

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

你在名字和姓氏的格式上做出错误的假设。 除了检查是空的,最好不要validation名称。

我已经search和search,玩和玩,虽然它不完美,它可能会帮助其他人尝试validation已被提供为一个variables的名字和姓氏。

在我的情况下,该variables是$名称。

我为我的PHP使用了下面的代码:

  if (preg_match('/\b([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}/', $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»

匹配下面的正则expression式,并将其匹配到反向引用编号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-}»

匹配下面的正则expression式(只有当这个失败时才尝试下一个select)«[AZ] {1} [az] {1,30} [ – ] {0,1}»

匹配“A”和“Z”之间的单个字符«[AZ] {1}»

正好1次«{1}»

匹配“a”和“z”之间的单个字符«[az] {1,30}»

一到三十次,尽可能多次,根据需要回馈(贪婪)«{1,30}»

匹配列表中出现的单个字符“ – ”«[ – ] {0,1}»

在零次和一次之间,尽可能多次,根据需要回馈(贪婪)«{0,1}»

或者匹配下面的正则expression式2(只有当这个失败时才尝试下一个select)«[AZ] {1} [ – \'] {1} [AZ] {0,1} [az] {1,30} [ – ] {0,1}»

匹配“A”和“Z”之间的单个字符«[AZ] {1}»

正好1次«{1}»

匹配下面列表中的单个字符«[ – \'] {1}»

正好1次«{1}»

其中一个字符“ – ”« – »一个字符«\»

匹配“A”和“Z”之间的单个字符«[AZ] {0,1}»

在零次和一次之间,尽可能多次,根据需要回馈(贪婪)«{0,1}»

匹配“a”和“z”之间的单个字符«[az] {1,30}»

一到三十次,尽可能多次,根据需要回馈(贪婪)«{1,30}»

匹配列表中出现的单个字符“ – ”«[ – ] {0,1}»

在零次和一次之间,尽可能多次,根据需要回馈(贪婪)«{0,1}»

或者匹配下面的正则expression式3(如果这个不匹配,整个组失败)«[az] {1,2} [ – \'] {1} [AZ] {1} [az] {1,30} »

匹配“a”和“z”之间的单个字符«[az] {1,2}»

1至2次之间,尽可能多次,根据需要回馈(贪婪)«{1,2}»

匹配“”和“'”«[ – \'] {1}之间的单个字符

正好1次«{1}»

匹配“A”和“Z”之间的单个字符«[AZ] {1}»

正好1次«{1}»

匹配“a”和“z”之间的单个字符«[az] {1,30}»

一到三十次,尽可能多次,根据需要回馈(贪婪)«{1,30}»

我知道这个validation完全假定每个填写表格的人都有一个西方的名字,这可能会消除世界上绝大多数的人。 不过,我觉得这是朝着正确方向迈出的一步。 也许这个正则expression式对于大师来说简单地说是太基本了,或者还有其他一些原因,我无法在我的search中find上述代码。 我花了太长时间试图弄清楚这一点,如果你看看下面的testing名字,你可能会注意到我的头脑有多雾。

我testing了以下名称的代码,结果显示在每个名称右侧的括号内。

  1. 史蒂夫·史密斯(失败)
  2. Stev3史密斯(失败)
  3. 史密斯(失败)
  4. 史蒂夫·史密斯(失败)
  5. 史蒂夫Sm1th(通过史蒂夫Sm)
  6. “是要守护(传给守护者)
  7. Jo Blow(通过)
  8. Hyoung Kyoung Wu(通过)
  9. 迈克·奥尼尔(通过)
  10. 史蒂夫约翰逊 – 史密斯(通过)
  11. 约瑟夫 – 舍姆夫(Jozef-Schmozev Hiemdel)(通过)
  12. O亨利·史密斯(通过)
  13. Mathais d'Arras(通过)
  14. 马丁·路德·金(通过)
  15. 市中心 – 詹姆斯·布朗(通过)
  16. 达伦麦卡蒂(通过)
  17. George De FunkMaster(通过)
  18. 寇蒂斯B球篮球(通过)
  19. 艾哈迈德·杰弗(通过)

如果你有基本的名字,上面的代码必须有一个以上的代码才能工作,这与我在testing中使用的类似,这个代码可能适合你。

如果您有任何改进,请让我知道。 我只是处于早期阶段(确定RegEx的头几个月)。

谢谢,祝你好运,史蒂夫

名字是

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

如果你需要整个名字部分比30个字母短,你就需要单独检查一下,我想。 expression".{3,30}"应该这样做。

你的姓氏的要求将转化为

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

但是你应该检查这些。 有很多姓氏包含空格。

正如马切克所言:

不要忘记像这样的名字:

Mathias d'Arras

马丁·路德·金

赫克托香肠 – 豪森

并删除像这样的情况:

..Mathias

马丁国王,

这将涵盖更多的情况:

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

美好的一天大家。

我创build了一个自定义正则expression式来处理名称:

我已经尝试了这些types的名称,发现工作完美

1)约翰·史密斯
2)约翰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 (AZ) (az) (' space -)") ] 

请注意双\逃跑字符

对于那些刚刚接触RegEx的人,我想我会包括一个解释。
^ (行首)
[a-zA-Z] {2,} (除了一个至less有两个字符的名字)
\ (会查找名字和姓氏之间的空格)
[a-zA-Z] {1,} (需要至less1个字符)
“? – ? (或者对于双重姓氏和连字符号的可能性)
[a-zA-Z] {2,} (除了一个至less有两个字符的名字)
\ s? (另一个空白的可能性)
([A-ZA-Z] {1,})? *(第二姓的可能性)*

希望这将有助于你的项目。
亲切的问候
弗朗索瓦·穆勒

为了简单起见,你可以使用:

 (.*)\s(.*) 

我喜欢这件事的是,姓氏总是在名字后面,所以如果你打算把这个匹配的组input到一个数据库中,名字是约翰·M·史密斯,那么第一组将是约翰·M。 ,第二组将是史密斯。

我用:

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

并使用其他方法testingmaxlength

通过所有这些答案后,我find了一种方法来build立一个支持大多数语言,只允许单词字符的一个微小的正则expression式。 它甚至支持一些特殊字符,如连字符,空格和撇号。 我已经在Pythontesting,它支持下面的字符:

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

支持的字符:

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

这是我使用的。 这个正则expression式只接受最小字符的名字,来自AZ az ,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,} 

所以,与客户,我们创造了这个疯狂的正则expression式:

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

我正在开发validation国际护照(ICAO)的应用程序。 我们只支持英文字符。 尽pipe大多数外国人的angular色都可以用拉丁字母表示,例如èby e,但是还有几个国家字符需要额外的字母来代表,比如德语变音符号,这个符号需要加上“e”例如由ae。

这是我们使用的名字和姓氏的JavaScript正则expression式:

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

国际通行证上最多可以有31个字符 。 我们使用maxlength =“31”来更好地expression错误信息,而不是将其包含在正则expression式中。

下面是我们在AngularJS 1.6中的代码片断和error handling:

 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> 

对于名字和姓氏,实际上只有两件事情你应该寻找:

  1. 长度
  2. 内容

这是我的正则expression式:

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

1.长度

这里{3,20}约束string的长度在3到20个字符之间。

2.内容

方括号[A-Za-z]之间的信息允许大写和小写字符。 所有后续符号( – ,.)也是允许的。

如果你想让整个名字在3到30个字符之间,对单个单词没有限制,试试这个:

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

请注意,它将所有的外来信件排除在外,如é,è,à,ï。

如果你想把3到30个字符的限制应用于每个单词,Jens regexp将会完成这项工作。

 var name = document.getElementById('login_name').value; if ( name.length < 4 && name.length > 30 ) { alert ( 'Name length is mismatch ' ) ; } var pattern = new RegExp("^[az\.0-9 ]+$"); var return_value = var pattern.exec(name); if ( return_value == null ) { alert ( "Please give valid Name"); return false; } 

在PHP中使用preg_match一个简单的函数

 <?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'); ?>