-2

我正在尝试编写一个至少需要 4 个字符的正则表达式,并且如果用管道分隔,则每个管道之后至少存在 4 个字符。

例如,这些条目将是有效的:

weather|bronco|flock
weather

然而,这些不会:

red
weather|br||flock|red

到目前为止,我几乎可以使用,除了它允许用户在进入另一个管道之前只添加 1 个字母数字:

^((?:(?!([|][|])|^[|]|[|]\\s|[|]$).)*)
4

4 回答 4

3

没有正则表达式更容易:

'foo|bar||baz'.split('|').every(function(elem) {
    return elem.length >= 4;
});

但是,如果您坚持使用正则表达式,则应该可以:

/^[^|]{4,}(?:\|[^|]{4,})*$/
于 2013-07-15T00:23:04.380 回答
1

如果你真的需要正则表达式,你可以使用以下

^(\w{4,}\|)+\w{4,}$

演示

我假设你需要\w在管道之间。它可以更改为其他符号。[^|](例如,如果您想允许除管道之外的任何内容,您可以将其替换为)。

没有正则表达式:

valid = true;
for(word in "string|with|pipes".split()) {
    if(word.length < 4) {

        valid = false;
        break;
    }
}
于 2013-07-15T00:21:58.337 回答
0
var array = "weather|br||flock|red".split('|'); //["weather", "br", "", "flock", "red"]
var valid = true;
//now iterate array and check if any item is < 4 length

for(var i=0; i < array.length; i++){
    if(array[i].length < 4 ) valid = false;
}

console.log(valid);
于 2013-07-15T00:17:42.593 回答
0

你可以用这个模式做到这一点:

var regex = /^(?:\w{4,}\|?)+$/

或有更多约束:

var regex = /^(?:\w{4,}(?:\|(?!$))?)+$/
于 2013-07-15T00:23:52.080 回答