出于网站验证的目的,我需要使用名字和姓氏进行验证。
对于名字,它应该只包含字母,可以是多个单词,包含空格,没有字母,最少3个字符,前30个字符。不应验证空字符串。 即:
杰森,杰森,杰森史密斯,杰森史密斯,杰森,杰森史密斯,杰森史密斯,杰森史密斯对于姓氏,它应该是一个单词,只有字母,至少有3个字符,前30个字符。不应验证空字符串。 IE: lazslo,Lazslo,LAZSLO
答案 0 :(得分:161)
/^[a-z ,.'-]+$/i
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u
答案 1 :(得分:68)
您对名字和姓氏的格式做出错误的假设。最好不要验证名称,除了检查它是否为空。
答案 2 :(得分:18)
在完成所有这些答案之后,我找到了一种方法来构建一个支持大多数语言的小型正则表达式,并且只允许使用单词字符。它甚至支持一些特殊字符,如连字符,空格和撇号。我在python中测试过它支持下面的字符:
^[\w'\-,.][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
支持的字符:
abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ'
陳大文
łŁőŐűŰZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųū
ÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁ
ŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ.-
ñÑâê都道府県Федерации
আবাসযোগ্য জমির걸쳐 있는
答案 3 :(得分:13)
每个人都好。
我创建了一个自定义正则表达式来处理名称:
我尝试过这些类型的名字并找到了完美的工作
1)约翰史密斯 2)John D&#39; Largy我的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 -)") ]
请注意双\ \ for escape charactors
对于那些不熟悉RegEx的人,我以为我会附上解释
^ (行首)
[a-zA-Z] {2,} (除了至少包含两个字符的名称外)
\ s (将查找姓名与姓氏之间的空格)
[a-zA-Z] {1,} (至少需要1个字符)
&#39;? - ? (对于双管和带连字符的姓氏,&#39; 或 - 的可能性)
[a-zA-Z] {2,} (除了至少包含两个字符的名称外)
\ s? (另一个空白的可能性)
([a-zA-Z] {1,})? *(第二姓的可能性)&lt; * br /&gt;
希望这对您的项目有所帮助 亲切的问候 弗朗索瓦·穆勒
答案 4 :(得分:10)
名字是
"([a-zA-Z]{3,30}\s*)+"
如果您需要整个名字部分短于30个字母,我认为您需要单独检查。表达式".{3,30}"
应该这样做。
您的姓氏要求将转化为
"[a-zA-Z]{3,30}"
但你应该检查这些。有很多姓氏包含空格。
答案 5 :(得分:7)
正如马塞克所说:
不要忘记以下名称:
Mathias d'Arras
Martin Luther King,Jr。
Hector Sausage-Hausen
并删除以下案例:
.. Mathias
Martin king,Jr .-
这将涵盖更多案例:
^([a-z]+[,.]?[ ]?|[a-z]+['-]?)+$
答案 6 :(得分:5)
为了简单起见,您可以使用:
(.*)\s(.*)
我喜欢的是,姓氏总是在第一个名字之后,所以如果您要将这些匹配的组输入数据库,名称是John M. Smith,那么第一组将是 约翰M.和第二组将是史密斯。
答案 7 :(得分:5)
我正在研究验证国际护照(ICAO)的应用程序。我们只支持英文字符。虽然大多数外国国民字符可以用拉丁字母表中的字符表示,例如è通过e,有几个国家字符需要额外的字母来代表它们,例如德语变音符号需要在字母中添加“e”,例如äbyae。
这是我们使用的名字和姓氏的JavaScript Regex:
rbenv local
The max number of characters on the international passport is up to 31。 我们使用maxlength =“31”来更好地输出错误消息,而不是将其包含在正则表达式中。
以下是AngularJS 1.6中我们的代码片段,其中包含表单和错误处理:
/^[a-zA-Z '.-]*$/
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;
}
答案 8 :(得分:3)
我用:
/^(?:[\u00c0-\u01ffa-zA-Z'-]){2,}(?:\s[\u00c0-\u01ffa-zA-Z'-]{2,})+$/i
使用其他方法测试maxlength
答案 9 :(得分:3)
这就是我使用的。
此正则表达式仅接受来自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,}
答案 10 :(得分:2)
我已经尝试了此页面上的几乎所有内容,然后我决定修改投票最多的答案,最终效果最佳。仅匹配所有语言并包含 .,-'
个字符。
这是:
/^[\p{L} ,.'-]+$/u
答案 11 :(得分:2)
最简单的方法。只需检查将近2个字。
/^[^\s]+( [^\s]+)+$/
有效名称
没有有效的姓名
答案 12 :(得分:2)
def test_func(a, b):
for item in locals():
new_val = ... # code to sanitize the input
# (convert to numpy array, reshape, etc.)
locals().update({item:new_val})
^在一行的开头断言位置。
\ p {L}匹配来自任何语言的任何类型的信件
{2,}量词 - 匹配2次和无限次,尽可能多次,根据需要回馈(贪婪)
$在行尾声明位置
所以它应该是包含至少2个字母(或符号)的任何语言的名称,不带数字或其他字符。
答案 13 :(得分:1)
对于名字和姓氏来说,实际上只有两件事你应该寻找:
这是我的正则表达式:
var regex = / ^ [A-Za-z - ,] {3,20}?=。* \ d)/
<强> 1。长度强>
这里{3,20}将字符串的长度限制在3到20个字符之间。
<强> 2。内容
方括号[A-Za-z]之间的信息允许使用大写和小写字符。所有后续符号( - ,。)也是允许的。
答案 14 :(得分:1)
所以,对于客户,我们创造了这个疯狂的正则表达式:
(^$)|(^([^\-!#\$%&\(\)\*,\./:;\?@\[\\\]_\{\|\}¨ˇ“”€\+<=>§°\d\s¤®™©]| )+$)
答案 15 :(得分:1)
这里有一个投票最多的问题,建议使用此正则表达式:
/^[a-z ,.'-]+$/i
它只能使用空格作为有效名称!
我认为最好的解决方案是对开始添加负面的期待:
^(?!\s)([a-z ,.'-]+)$/i
答案 16 :(得分:0)
以下表达式可在UTF-16支持的任何语言上运行,并确保名称(即前+后)至少有至少两个组成部分,但也可以使用任意数量的中间名。
/^(\S+ )+\S+$/u
在撰写本文时,似乎没有其他答案符合所有这些标准。甚至最接近的^\p{L}{2,}$
也无法达到要求,因为它也将匹配“不可见”字符,例如U+FEFF
(零宽度无间断空格)。
答案 17 :(得分:0)
尝试使用这些解决方案,以获得最大的兼容性,因为我已经发布了here:
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>
答案 18 :(得分:0)
此正则表达式对我有用(在Angular 8中使用):
([a-zA-Z',.-]+( [a-zA-Z',.-]+)*){2,30}
如果存在以下情况,它将无效:-
- 任何空格开头或结尾的名称
- Got符号,例如@
- 少于2或超过30
示例无效的名字(空格)
有效的名字示例:
答案 19 :(得分:0)
这似乎对我有用:
[\S]{2,} [\S]{2,}( [\S]{2,})*
答案 20 :(得分:-1)
只有一个空格的全名:
^[a-zA-Z'\-\pL]+(?:(?! {2})[a-zA-Z'\-\pL ])*[a-zA-Z'\-\pL]+$
答案 21 :(得分:-2)
在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');
?>
答案 22 :(得分:-2)
如果您希望整个名字在3到30个字符之间,对单个字词没有限制,请尝试以下操作:
[a-zA-Z ]{3,30}
请注意,它将所有外国字母排除为é,è,à,ï。
如果您希望将3到30个字符的限制应用于每个单词,Jens regexp将完成这项工作。
答案 23 :(得分:-2)
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;
}