我需要一个RegEx来匹配以下条件:
接受的字符串示例:
不接受字符串的示例:
我尝试了什么:
答案 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字母类字符,可选地后跟一个空格和更多字母,即一个或两个单词。
修改强>
好的 - 所以对于javascript你可以尝试
^(?=.{3,50}$)[^\s\d]*(\s[^\s\d]*)?$
它基本相同,只是匹配unicode类,它匹配非空格和数字。这不是完美的,而是一个简单的解决方案,适用于大多数(拉丁语)案例。
答案 2 :(得分:0)
我想你可以使用下一个。它检查最小长度但不检查最大长度。您可以在不同的检查中确保它
^([A-Za-z]{3,50}|([A-Za-z]+\s[A-Za-z]+))$