首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接受一个或两个单词

接受一个或两个单词
EN

Stack Overflow用户
提问于 2017-01-13 14:39:10
回答 3查看 2K关注 0票数 0

我需要一个RegEx来匹配以下条件:

  • 1或2个字
  • 总最小长度为3
  • 总最大长度为50
  • 接受重音字符
  • 没有数字是有利的。

接受字符串的示例:

  • 卡门·加西亚
  • 若昂·佩德罗
  • 维托
  • LóPezz
  • 纳达尔
  • loriPsium PsisVèrbizbbbbbbbbbb

不接受字符串的示例:

  • 乔尼·卡姆·瓦尼斯
  • 9 9lucas P.us-kas 1 Li1

我试过的是:

  • ^(?!.*?\s{2}) {3,50}$
  • ^(){3,50}$
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-13 15:04:24

您未能标记regex风味/编程语言/工具。但有一种方法是:

代码语言:javascript
复制
^(?=.{3,50}$)\p{L}*(\s\p{L}*)?$

它使用积极的前瞻性,以确保它在3到50个字符之间。它简单地检查unicode字母类字符,可选地后面跟着一个空格和多个字母,即一个或两个单词。

在regex101这里见

编辑

好的-对于javascript,您可以尝试

代码语言:javascript
复制
^(?=.{3,50}$)[^\s\d]*(\s[^\s\d]*)?$

它基本上是一样的,只是不匹配unicode类,而是匹配非空间和数字。这并不完美,但在大多数(拉丁语)情况下,这是一个简单的解决方案。

在regex101这里看这个

票数 1
EN

Stack Overflow用户

发布于 2017-01-13 14:56:07

给你:

代码语言:javascript
复制
(?=^.{3,50}$)(\s*\p{L}+\s*){1,2}

或者,如果您不希望在单词之间出现任何前导空格、尾随空格或多个空格:

代码语言:javascript
复制
(?=^.{3,50}$)\p{L}+(\s\p{L}+)?

编辑:

正如另一张这样的帖子所显示的,Javascript在Unicode字符类中有一个问题。因此,\p{L}不会在Javascript中工作。

这对你意味着什么?另一篇文章展示了三种不同的解决方案。哪种解决方案适合您,取决于您是否预先知道哪些重音字符或非单词(例如,标点符号)字符可能输入。

一种可能的方法是列出有效的重音字符,然后将其连接到regex:

代码语言:javascript
复制
var validWordCharacters = "[" + "a-z" + "A-Z" + "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇߨøÅ寿œ" + "]";

var regex = "(?=^.{3,50}$)" + validWordCharacters + "+(\s" + validWordCharacters + "+)?";

regexCompiled = new RegExp(regex);

另一种可能(更简洁)的解决方案是使用一系列代码点:

代码语言:javascript
复制
var validWordCharacters = "[" + "a-z" + "A-Z" + "\u00C0-\u024F" + "]";

var regex = "(?=^.{3,50}$)" + validWordCharacters + "+(\s" + validWordCharacters + "+)?";

regexCompiled = new RegExp(regex);
票数 1
EN

Stack Overflow用户

发布于 2017-01-13 14:50:50

我想你可以用下一个。它检查最小长度,但不检查最大值。您可以在不同的支票中确认。

代码语言:javascript
复制
^([A-Za-z]{3,50}|([A-Za-z]+\s[A-Za-z]+))$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41637044

复制
相关文章

相似问题

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