如何在JavaScript中组合正则表达式

如何在JavaScript中组合正则表达式,javascript,regex,Javascript,Regex,我有一个要求,输入字符串不应该是空字符串(允许所有字符),长度应该在1到500之间 我分别找到了用于检查空字符串和长度的工作表达式。我无法将它们组合成一个表达式,该表达式应该告诉我输入是“空字符串”还是超过500个字符 对于空字符串 var regex = /^\s*$/; 长 {1,499} 正则表达式对于您的需要来说有点过头了。你怎么了 if (myString == null || myString.length > 500){ // handle failed val

我有一个要求,输入字符串不应该是空字符串(允许所有字符),长度应该在1到500之间

我分别找到了用于检查空字符串和长度的工作表达式。我无法将它们组合成一个表达式,该表达式应该告诉我输入是“空字符串”还是超过500个字符

对于空字符串

var regex = /^\s*$/;

{1,499}

正则表达式对于您的需要来说有点过头了。你怎么了

if (myString == null || myString.length > 500){
    // handle failed validation here
}
编辑

上面的命令将允许传递空字符串。可供1至500人使用

if (myString == null || myString.length < 1 || myString.length > 500){
    // handle failed validation here
}
if(myString==null | | myString.length<1 | | myString.length>500){
//在此处处理验证失败
}

从您检查“空”字符串的示例中,很明显您希望忽略开头或结尾的空白

如果您实际上没有regex要求,最简单的方法就是
trim
并检查长度:

str = str.trim();
if (str.length && str.length <= 500) {
    // All good
}
请注意
\S
,其中至少需要一个非空白字符,后跟0到499个其他字符

注意:您需要在某个点对字符串进行
trim
,因为另一端的空格可能会超过500的限制

用法示例:

//注意:使用5而不是500缩短测试
var rex=/^\s*\s.{0,4}\s*$/;
console.log(rex.test(“”);//假的
console.log(rex.test(“a”);//真的
console.log(rex.test(“a”);//真的
console.log(rex.test(“12345”);//真的
console.log(rex.test(“123456”);//假的
console.log(rex.test(“123456”);//假的
console.log(rex.test(“1234”);//真的
console.log(rex.test(“”);//错误
。作为控制台包装器{
最大高度:100%!重要;
}
使用

相配

  • ^
    -字符串的开头
  • (?!\s+$)
    -字符串末尾没有1个或多个空格(包含1个或多个空格的字符串在此失败)
  • [\s\s]{1500}
    -任何1到500个字符(因此,不允许使用空字符串)
  • $
    -字符串结束

“jsfiddle here”您的问题的全部内容必须在您的问题中,而不仅仅是链接。链接会腐烂,使得问题及其答案对未来的人们来说毫无用处,人们不应该非得离开网站去帮助你。提出一个问题,最好使用堆栈片段(工具栏按钮)使其可运行。更多:不应为空字符串且长度在0到500之间?这里有一个矛盾。也许你的意思是[1499]是的,极客先生。已更新描述是否允许500个字符的字符串?允许500个字符的字符串。如果字符串超过500个字符,则不允许使用
'==null//false
我同意您的看法。这是可行的与上述如果condition@evolutionxboxOP要求介于0和500之间,我假设一个空字符串是有效的。也许我误解了?“输入字符串不应为空字符串”@evolutionxbox Ah,OP已将问题更新为1到500之间的显式状态。我想我们对这个问题的理解有点不同。
/[\s\s]/
/./
之间有区别吗?@Zevgon
与换行符不匹配。啊,我明白了!谢谢@Wiktor@user2555212但是,这将匹配超过500个字符的字符串。您的要求是长度应在1到500之间。@WiktorStribiżew:我将其解释为“忽略两端空白的1-500个字符”(正如我在开头所说)。@T.J.Crowder第一段非常清楚:输入字符串不应是空字符串(允许所有字符),长度应在1到500之间。您的解决方案不符合第二个要求。否则,问题就不清楚了。@WiktorStribiżew:请参阅“空字符串”的正则表达式(我在第一句话中再次调用了该正则表达式)。@user2555212:要清楚一点:如果字符串的两端都有空格,则该字符串可能有500个以上的字符(事实上,上面的一个测试显示了这一点);如果你想移除这些,你可能会修剪。
//          111          333
// ---------vvv----------vvv
var rex = /^\s*\S.{0,499}\s*$/;
// ------------^^^^^^^^^^
//             2222222222
/^(?!\s+$)[\s\S]{1,500}$/