首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式的名称验证

使用正则表达式的名称验证
EN

Stack Overflow用户
提问于 2019-01-31 12:45:30
回答 2查看 49关注 0票数 1

我在代码中使用了一个正则表达式,为了验证名称并发送表单,我需要一些帮助。

名称应以大写字母开头,可以从2-3个单词开始,可以用撇号、空格或破折号分隔,如:

维克多·雨果 珍妮·达瓦尔 让-马克·艾罗

我尝试用大写开头,使用/^[A-z][a-z]/,但是我不知道如何继续它来验证空格、破折号和撇号。

/^[A-z][a-z]/

我不知道怎么继续下去,谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-31 12:54:35

您可以尝试下面的代码:

为了这个目的,我建议和https://regexr.com/一起玩,它非常方便!

我添加了一个isValidNameStrict,它只接受名称中数量有限的字符。

根据您认为合适的情况修改add‘组以添加额外的字符。

代码语言:javascript
复制
function isValidNameStrict(name) {
    let regEx = /^([A-Z][a-z']*[\-\s]?){2,}$/;
    return regEx.test(name);
}

function isValidName(name) {
    let regEx = /^(?:[A-Z][^\s]*\s?){2}$/;
    return regEx.test(name);
}

function testName(name) {
    console.log(`'${name}' is ${isValidNameStrict(name) ? "valid": "not valid"}`);
}

testName("Victor Hugo");
testName("Jeanne D'arc");
testName("Jean-Marc Ayrault");
testName("The Rock");
testName("Victor hugo");
testName("");
testName("Ozymandias");

票数 0
EN

Stack Overflow用户

发布于 2019-01-31 12:54:17

你可以用这个正则表达式,

代码语言:javascript
复制
\b[A-Z][a-z]*(?:'[a-z]+)?(?:[ -][A-Z][a-z]*(?:'[a-z]+)?)*\b

解释:

  • \b[A-Z][a-z]* -开始匹配单词边界和大写字母,后面跟着0或更多小写字母。
  • (?:'[a-z]+)? -可选地后面跟着'和一些小写字母。如果您想重复多次此操作,请将?更改为*,例如,如果您真的希望支持D'arcd'arc之类的名称,我怀疑您是否愿意,这就是为什么我将其与?一起保存的原因。
  • (?:[ -] -启动另一个非分组模式,并开始使用空格或连字符进行匹配。
  • [A-Z][a-z]*(?:'[a-z]+)?)* -进一步匹配相同的结构,在开始的正则表达式和零或更多次。
  • \b -在看到单词边界后停止

演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54460933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档