我需要一个RegEx来匹配以下条件:
接受字符串的示例:
不接受字符串的示例:
我试过的是:
发布于 2017-01-13 15:04:24
您未能标记regex风味/编程语言/工具。但有一种方法是:
^(?=.{3,50}$)\p{L}*(\s\p{L}*)?$它使用积极的前瞻性,以确保它在3到50个字符之间。它简单地检查unicode字母类字符,可选地后面跟着一个空格和多个字母,即一个或两个单词。
编辑
好的-对于javascript,您可以尝试
^(?=.{3,50}$)[^\s\d]*(\s[^\s\d]*)?$它基本上是一样的,只是不匹配unicode类,而是匹配非空间和数字。这并不完美,但在大多数(拉丁语)情况下,这是一个简单的解决方案。
发布于 2017-01-13 14:56:07
给你:
(?=^.{3,50}$)(\s*\p{L}+\s*){1,2}或者,如果您不希望在单词之间出现任何前导空格、尾随空格或多个空格:
(?=^.{3,50}$)\p{L}+(\s\p{L}+)?编辑:
正如另一张这样的帖子所显示的,Javascript在Unicode字符类中有一个问题。因此,\p{L}不会在Javascript中工作。
这对你意味着什么?另一篇文章展示了三种不同的解决方案。哪种解决方案适合您,取决于您是否预先知道哪些重音字符或非单词(例如,标点符号)字符可能输入。
一种可能的方法是列出有效的重音字符,然后将其连接到regex:
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);发布于 2017-01-13 14:50:50
我想你可以用下一个。它检查最小长度,但不检查最大值。您可以在不同的支票中确认。
^([A-Za-z]{3,50}|([A-Za-z]+\s[A-Za-z]+))$https://stackoverflow.com/questions/41637044
复制相似问题