2013-06-14 3 views
-1

У меня проблема с регулярным выражением с проверкой кода региона. Мой код региона может быть только одна цифра, но она также может быть цифры, разделенные «-»javascript regex для кода региона

для примера мой код региона может быть один из следующих:
6-66
77-7

Как видите, у меня должна быть хотя бы одна цифра или цифры, разделенные «-», и если они разделены, должны быть цифры после знака «-» (не имеет значения, сколько). Таким образом, 6- не должно быть подтверждено как код правового региона. Я пробую 2 часа, чтобы решить это, но я не мог, поэтому, пожалуйста, помогите мне! Спасибо!

+2

Покажите нам некоторые из ваших попыток. Это не самая сложная задача регулярных выражений. Вы проверили [хороший учебник] (http://www.regular-expressions.info/tutorial.html)? –

ответ

2
/\d+(-\d+)?$/ 

Это будет соответствовать 6, 6-66, 77-7 , but not 6-`

+0

10x. Можете ли вы объяснить, что именно? $ После группы() –

+0

@KaloyanStamatov '?' Делает группу опциональной. «$» Привязывает его к концу инструкции (т. Е. '\ D +' должен быть концом, или '- \ d +' должен быть концом его). Это предотвращает появление дополнительных символов в конце. Вы также можете добавить '^' в начале, чтобы быть более конкретным –

+0

10x снова человек !!! –

1

Если то, что вы ищете вся строка:

/^\d+(?:-\d+)?$/ 

или что-то подобное:

if (parseInt(yourstring.split(/-/)[0])>=eval(yourstring)) alert('true'); 
else alert('false'); 

Но это сложнее :) и менее эффективно! И если условие ложно, вы сработаете код!

+0

+1, но вы, вероятно, также захотите добавить якоря. Речь идет о проверке строки, а не просто поиске подстроки. –

+0

'/ \ d + (?: - \ d +)? /. Test ('6 -')' "true" –

0
var data = ['6', '6-66', '77-7', '6-']; 

var len = data.length; 

for(var i=0; i<len; ++i) { 
    var current = data[i]; 
    var result = data[i].match(/^(\d+|\d+[-]\d+)$/); 
    if(result != null) { 
    console.log(current); 
    } 
} 

--output:-- 
6 
6-66 
77-7 
0

Для быстрого ответа вы можете попробовать следующее:

/^([0-9])|([0-9]\-[0-9][0-9])|([0-9][0-9]\-[0-9])$/ 

или в случае, если ваша поддержка двигатель PERL -стандартные классы символов:

/^(\d)|(\d\-\d\d)|(\d\d\-\d)$/ 

здесь то, что он делает:

  1. между/и/заключается в определении строки регулярное выражение

  2. \ д обозначает одну цифру также coudl быть записано в виде [0-9]

  3. () определяет подвыражение, поэтому (\ d) соответствует вашему первому однозначному, (\ d- \ d \ d) второму трехзначному стилю и последнему (\ d \ d- \ d) третьему варианту трехзначного кода региона

  4. | (A) | (B) | (C), поэтому, объединив предыдущие три, мы получим:

    /(\ d) | (\ d- \ d \ d) | (\ d \ d- \ d)/

  5. И наконец,^означает начало строки и $ - конец строки.

также есть так называемый режим BRE (в которой вы должны добавить «\» символ перед каждой скобки), но я думаю, что это не так. Однако, если у вас будет свободное время, рассмотрите любой быстрый учебник, например, this one.

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