2013-07-15 3 views
-2

Я пытаюсь написать регулярное выражение, которое требует минимум 4 символа, и, если оно разделено трубами, существует не менее 4 символы, присутствующие после каждой трубы.RegExp (в Javascript) минимальная длина и минимальная длина после труб, если имеются трубы

Например, эти данные будут действительны:

weather|bronco|flock 
weather 

Принимая во внимание, это те не будут:

red 
weather|br||flock|red 

То, что я до сих пор работает почти, за исключением того, что она позволяет пользователям добавлять только 1 алфавитно-цифровой перед входом в других трубах:

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

какие символы могут присутствовать после того, как трубы, и вы пробовали что-нибудь – aaronman

+1

ли вы на самом деле нужно регулярное выражение? – RiaD

+0

Вы пытались создать регулярное выражение? Как далеко вы получили? Мы можем это увидеть? Почему это не работает? –

ответ

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); 
+0

Он хочет регулярное выражение , также почему нужно потратить время на разделение, а затем проверить, когда вы можете сделать это за один шаг – aaronman

+0

@aaronman Будет ли это работать? – sabithpocker

+0

Я хочу сказать «да», но причина, по которой я еще не ответил, состоит в том, что его условия очень неспецифичны, ответ на этот вопрос потребует от меня большого количества предложений – aaronman

1

если вам действительно нужно регулярное выражение, вы можете использовать следующие

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

DEMO

Я предполагал, что вам нужно \w между трубами. Его можно было изменить на другие символы. (Вы можете заменить его на [^|], например, если вы хотите разрешить что угодно, кроме трубы).

Без регулярных выражений:

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

     valid = false; 
     break; 
    } 
} 
+0

Почему вы думаете, что он не должен использовать регулярное выражение, он проверяет строку – aaronman

+0

, почему вы рекомендуете без регулярного выражения? У меня просто был другой пользователь, обвиняющий меня в этом, LOL! – sabithpocker

+0

, потому что для этого используется регулярное выражение. – RiaD

3

легче обойтись без регулярных выражений:

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

Но если вы настаиваете на регулярное выражение, это должно работать:

/^[^|]{4,}(?:\|[^|]{4,})*$/ 
+0

Это очень близко.Он проверяет минимум 4 символа, но недействителен, если я вводил длину символов после строки – user2581889

+0

@ user2581889: Какая у вас тестовая строка? – Blender

+0

Это регулярное выражение сложнее, чем должно быть. '/^[^ |] {4,} (?: \ | [^ |] {4,}) * $ /' делает то же самое. –

0

Вы можете сделайте это по этой схеме:

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

или с большим количеством ограничений:

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

Это не сработало для меня. – user2581889

+0

@ user2581889: http://regexpal.com/?flags=gm®ex=%5E(%3F%3A%5Cw%7B4%2C%7D%5C%7C%3F)%2B%24&input=weather%7Cbronco%7Cflock% 0Aweather% 0Ared% 0Aweather% 7Cbr% 7C% 7Cflock% 7Cred –

+0

Однако это тоже очень близко:^((?: (?! ([|] [|]) |^[|] | [|] \\ s | [|] $).) *) – user2581889

Смежные вопросы