名字的正则表达式

时间:2010-03-05 09:36:57

标签: regex validation

出于网站验证的目的,我需要使用名字和姓氏进行验证。

对于名字,它应该只包含字母,可以是多个单词,包含空格,没有字母,最少3个字符,前30个字符。不应验证空字符串。 即:

杰森,杰森,杰森史密斯,杰森史密斯,杰森,杰森史密斯,杰森史密斯,杰森史密斯

对于姓氏,它应该是一个单词,只有字母,至少有3个字符,前30个字符。不应验证空字符串。 IE: lazslo,Lazslo,LAZSLO

24 个答案:

答案 0 :(得分:161)

不要忘记以下名称:

  • Mathias d'Arras
  • Martin Luther King,Jr。
  • Hector Sausage-Hausen

这应该可以解决大多数问题:

/^[a-z ,.'-]+$/i

或支持带有超甜蜜unicode的国际名称:

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

答案 1 :(得分:68)

您对名字和姓氏的格式做出错误的假设。最好不要验证名称,除了检查它是否为空。

答案 2 :(得分:18)

在完成所有这些答案之后,我找到了一种方法来构建一个支持大多数语言的小型正则表达式,并且只允许使用单词字符。它甚至支持一些特殊字符,如连字符,空格和撇号。我在python中测试过它支持下面的字符:

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

支持的字符:

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

答案 3 :(得分:13)

每个人都好。

我创建了一个自定义正则表达式来处理名称:

我尝试过这些类型的名字并找到了完美的工作

1)约翰史密斯 2)John D&#39; Largy
3)John Doe-Smith
4)John Doe Smith
5)Hector Sausage-Hausen
6)Mathias d&#39; Arras
7)马丁路德金 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,})?)

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]+)+$/

有效名称

  • John Doe
  • pedro alberto ch
  • Ar。 Gen
  • 阿拉斯达拉斯
  • 小马丁·路德·金

没有有效的姓名

  • 约翰
  • 陈大文

答案 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)

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

  1. 长度
  2. 内容
  3. 这是我的正则表达式:

    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}

enter image description here

如果存在以下情况,它将无效:-

  
      
  1. 任何空格开头或结尾的名称
  2.   
  3. Got符号,例如@
  4.   
  5. 少于2或超过30
  6.   

示例无效的名字(空格)

enter image description here

有效的名字示例:

enter image description here

答案 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; 
}