使文本输入仅接受适当的人名

问题描述 投票:0回答:2

阅读此:regular expression for first and last name

这是我的测试用例:

    Fail cases:
    陳大文 (fail, not support international name)
    Stev3 Smith (fail, contain number)
    123 (fail, contain number)
    @##$ smith (fail, special char)
    .Mathias (fail, dot)
    ..Mathias (fail, dot dot)
    Success cases:
    Martin Luther King, Jr. (pass)
      john   smith (pass, javascript does str.trim())
    d'Are to Beaware (pass)
    Jo Blow (pass)
    Steve Johnson-Smith (pass)
    O Henry Smith (pass)
    john & john (pass, support &)

我当前的解决方案:

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

我的问题是我无法通过此:

.Mathias (fail, dot)
..Mathias (fail, dot dot)

和与此同时

Martin Luther King, Jr.

任何想法?

javascript regex
2个回答
0
投票

简单,只需将[\w'\-,.](将与。匹配)替换为\w,就不会。

您的测试用例将通过-是否为“真实”名称尚有争议。


0
投票

想要做这种事情的问题是,您只能根据对名称的了解[[think来解决此问题。当然,有很多人会使用您经常看到的名字,例如John Smith,但也有很多人没有。例如,您想让名字中有数字的人失败,但是有些人中有数字的人,因为这在世界各地都不是非法的。在世界上说西班牙语的地区,有些人的全名很长,而且中间名很多个,如果您不熟悉地名,这可能会破坏您对地名的其他假设。

由于一对夫妇的名字上有数字,所以放弃所有验证似乎有点愚蠢,但是真正的问题是您要对未知的未知数做出假设。您不知道那里有什么样的名称,您也不知道关于名称的某些事情。这篇关于falsehoods programmers believe about names的博客文章更加深入地介绍了此问题。

只要确保确定名称,以使世界上所有的Bobby Tables都不在数据库中,就不会有真正的综合方法来进行名称验证,而不会做出非常糟糕的猜测。特别是不适用于正则表达式。

© www.soinside.com 2019 - 2024. All rights reserved.