为了进行网站验证,我需要验证名字和姓氏。
对于名字,它只能包含字母,可以是几个带空格的单词,并且至少三个字符,最大30个字符。不应验证空字符串(例如Jason,jason,jason smith,jason smith,JASON,Jason smith,jason Smith和jason SMITH)。
对于姓氏,它应该是一个单词,只有字母,至少三个字符,但最多30个字符。空字符串不应该被验证(例如lazslo,Lazslo和LAZSLO)。
为了进行网站验证,我需要验证名字和姓氏。
对于名字,它只能包含字母,可以是几个带空格的单词,并且至少三个字符,最大30个字符。不应验证空字符串(例如Jason,jason,jason smith,jason smith,JASON,Jason smith,jason Smith和jason SMITH)。
对于姓氏,它应该是一个单词,只有字母,至少三个字符,但最多30个字符。空字符串不应该被验证(例如lazslo,Lazslo和LAZSLO)。
Answers:
/^[a-z ,.'-]+$/i
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u
.
(小数点/点/句号),因为它是正则表达式通配符=)
őŐűŰ
,缺少匈牙利字符,也缺少波兰字符łŁ
,更不用说一些立陶宛和拉脱维亚字符。而是尝试找到一个将外来字符转换为适当的无重音版本的库,然后编写正则/^[a-z ,.'-]+$/i
表达式。
陳大文
不是有效的名字吗?
/^[\p{L}'][ \p{L}'-]*[\p{L}]$/u
,但是相当宽容。
经过所有这些答案之后,我找到了一种构建微型正则表达式的方法,该正则表达式支持大多数语言,并且仅允许单词字符。它甚至支持一些特殊字符,例如连字符,空格和撇号。我已经在python中测试过,它支持以下字符:
^[\w'\-,.][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
支持的字符:
abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ'
陳大文
łŁőŐűŰZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųū
ÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁ
ŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ.-
ñÑâê都道府県Федерации
আবাসযোগ্য জমির걸쳐 있는
^[\w'\-,.]*[^_!¡?÷?¿\/\\+=@#$%ˆ&*(){}|~<>;:[\]]*$
^[^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
我创建了一个自定义正则表达式来处理名称:
我已经尝试过这些类型的名称,并发现可以正常工作
我的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 (A-Z) (a-z) (' space -)") ]
请注意\\
转义字符的双精度
对于RegEx新手,我想我会附上解释。
^ // start of line
[a-zA-Z]{2,} // will except a name with at least two characters
\s // will look for white space between name and surname
[a-zA-Z]{1,} // needs at least 1 Character
\'?-? // possibility of **'** or **-** for double barreled and hyphenated surnames
[a-zA-Z]{2,} // will except a name with at least two characters
\s? // possibility of another whitespace
([a-zA-Z]{1,})? // possibility of a second surname
我进行了搜索,搜索和使用,虽然它并不完美,但它可能会帮助其他人尝试验证作为一个变量提供的名字和姓氏。
就我而言,该变量为$ 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
我自己在学习RegEx,但确实有RegEx好友提供的代码说明。
这里是:
在单词边界«\ 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次之间(尽可能多地),根据需要进行回馈(贪婪)«{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次之间(尽可能多地),根据需要进行回馈(贪婪)«{1,30}»
匹配列表“-”«[-] {0,1}»中的单个字符
在零到一遍之间,尽可能多地遍历,并根据需要返回(贪婪)«{0,1}»
或匹配下面的第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次之间(尽可能多地),根据需要进行回馈(贪婪)«{1,30}»
我知道此验证完全假设每个填写表格的人都有西方名字,这可能会消灭世界上绝大多数人。但是,我觉得这是朝着正确方向迈出的一步。也许这个正则表达式对于专家来说太简单了,无法简单地解决,或者还有其他一些原因使我无法在搜索中找到上述代码。我花了很长时间试图弄清楚这一点,如果您看下面的测试名称,您可能会注意到我对这一切的迷惑。
我在以下名称上测试了代码,结果在每个名称右侧的括号中。
如果您有基本名称,则上面的代码必须有不超过五个(最多五个)才能起作用,这些名称与我在测试过程中使用的相似,该代码可能适合您。
如果您有任何改进,请告诉我。我还处于初期阶段(弄清楚RegEx的头几个月。
谢谢,祝你好运,史蒂夫
名字是
"([a-zA-Z]{3,30}\s*)+"
我认为,如果您需要将整个名字部分短于30个字母,则需要单独检查。表达方式".{3,30}"
应该做到这一点。
您的姓氏要求将转化为
"[a-zA-Z]{3,30}"
但您应该检查这些。有很多姓氏包含空格。
正如maček所说:
不要忘了像这样的名字:
Mathias d'Arras
马丁路德金。
赫克托香肠-豪森
并删除类似的情况:
..Mathias
小马丁·金-
这将涵盖更多情况:
^([a-z]+[,.]?[ ]?|[a-z]+['-]?)+$
我正在开发可验证国际护照(ICAO)的应用程序。我们仅支持英文字符。虽然大多数外来国家字符可以用拉丁字母中的字符表示,例如èby e,但有些国家字符需要一个额外的字母来表示它们,例如德国变音符号,要求在字母上添加“ e”例如äby ae。
这是我们使用的名字和姓氏的JavaScript正则表达式:
/^[a-zA-Z '.-]*$/
国际护照上的最大字符数为31。我们使用maxlength =“ 31”来改善单词错误消息,而不是将其包括在正则表达式中。
这是AngularJS 1.6中的代码片段,其中包含表单和错误处理:
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>
此正则表达式为我工作(在Angular 8中使用):
([a-zA-Z',.-]+( [a-zA-Z',.-]+)*){2,30}
如果存在以下情况,它将是无效的:
- 名称的任何空格开头或结尾
- 有符号,例如@
- 小于2或大于30
示例无效的名字(空格)
有效名字示例:
^\p{L}{2,}$
^声明行首的位置。
\ p {L}匹配来自任何语言的任何字母
{2,}量词-匹配2次和无限次,尽可能多地匹配,并根据需要返回(贪婪)
$在行尾声明位置
因此,该名称应为任何语言的名称,至少包含2个字母(或符号),且不包含数字或其他字符。
因此,与客户一起,我们创建了这个疯狂的正则表达式:
(^$)|(^([^\-!#\$%&\(\)\*,\./:;\?@\[\\\]_\{\|\}¨ˇ“”€\+<=>§°\d\s¤®™©]| )+$)
这就是我用的。
此正则表达式仅接受带有最小字符的名称A-Z a-z ,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,}
以下表达式可在UTF-16支持的任何语言上运行,并确保名称中至少包含两个组成部分(即first + last),但也将允许任意数量的中间名。
/^(\S+ )+\S+$/u
在撰写本文时,似乎没有其他答案可以满足所有这些标准。甚至^\p{L}{2,}$
最接近的偶数也不足,因为它也将匹配“不可见”字符,例如U+FEFF
(零宽度无间断空格)。
尝试这些解决方案,以获得最大的兼容性,正如我已经在此处发布的:
JavaScript:
var nm_re = /^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$/;
HTML5:
<input type="text" name="full_name" id="full_name" pattern="^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$" required>
仅有一个空格的全名:
^[a-zA-Z'\-\pL]+(?:(?! {2})[a-zA-Z'\-\pL ])*[a-zA-Z'\-\pL]+$
如果您希望整个名字在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("^[a-z\.0-9 ]+$");
var return_value = var pattern.exec(name);
if ( return_value == null )
{
alert ( "Please give valid Name");
return false;
}