第一个和最后一个名字的正则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了以下名称的代码,结果显示在每个名称右侧的括号内。
- 史蒂夫·史密斯(失败)
- Stev3史密斯(失败)
- 史密斯(失败)
- 史蒂夫·史密斯(失败)
- 史蒂夫Sm1th(通过史蒂夫Sm)
- “是要守护(传给守护者)
- Jo Blow(通过)
- Hyoung Kyoung Wu(通过)
- 迈克·奥尼尔(通过)
- 史蒂夫约翰逊 – 史密斯(通过)
- 约瑟夫 – 舍姆夫(Jozef-Schmozev Hiemdel)(通过)
- O亨利·史密斯(通过)
- Mathais d'Arras(通过)
- 马丁·路德·金(通过)
- 市中心 – 詹姆斯·布朗(通过)
- 达伦麦卡蒂(通过)
- George De FunkMaster(通过)
- 寇蒂斯B球篮球(通过)
- 艾哈迈德·杰弗(通过)
如果你有基本的名字,上面的代码必须有一个以上的代码才能工作,这与我在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>
对于名字和姓氏,实际上只有两件事情你应该寻找:
- 长度
- 内容
这是我的正则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'); ?>