正则表达式接受一两个字

时间:2017-01-13 14:39:11

标签: javascript regex

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

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

接受的字符串示例:

  • Karmen Garcia
  • JoãoPedro
  • 的Vitor
  • maxiliamumLóPezz
  • 纳达尔
  • loriPsiumPsisVõèrbizbbbbbbbbbb

不接受字符串的示例:

  • Jony Cam Vanis
  • 9lucas P.us-kas1 Li1

我尝试了什么:

  • ^(?!。*?\ s {2})[A-Za-z] {3,50} $
  • ^([A-ZA-Z] [A-ZA-Z]){3,50} $

3 个答案:

答案 0 :(得分:1)

你走了:

(?=^.{3,50}$)(\s*\p{L}+\s*){1,2}

或者,如果您不想要任何前导空格,尾随空格或单词之间的多个空格:

(?=^.{3,50}$)\p{L}+(\s\p{L}+)?

修改

this other SO post所示,Javascript存在Unicode字符类的问题。因此,\p{L}无法使用Javascript。

这对你意味着什么?那么,其他帖子显示了三种不同的解决方案。哪种解决方案适合您取决于您​​是否事先确切知道哪些重音字符或非字(例如标点符号)字符可能会输入。

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

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

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

regexCompiled = new RegExp(regex);

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

var validWordCharacters = "[" + "a-z" + "A-Z" + "\u00C0-\u024F" + "]";

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

regexCompiled = new RegExp(regex);

答案 1 :(得分:1)

您无法标记正则表达式/编程语言/工具。但这是一种做法:

^(?=.{3,50}$)\p{L}*(\s\p{L}*)?$

它使用正面预测来确保它在3到50个字符之间。它简单地检查unicode字母类字符,可选地后跟一个空格和更多字母,即一个或两个单词。

See it here at regex101

修改

好的 - 所以对于javascript你可以尝试

^(?=.{3,50}$)[^\s\d]*(\s[^\s\d]*)?$

它基本相同,只是匹配unicode类,它匹配非空格和数字。这不是完美的,而是一个简单的解决方案,适用于大多数(拉丁语)案例。

See this here at regex101

答案 2 :(得分:0)

我想你可以使用下一个。它检查最小长度但不检查最大长度。您可以在不同的检查中确保它

^([A-Za-z]{3,50}|([A-Za-z]+\s[A-Za-z]+))$