2016-12-05 5 views
1

Я пытаюсь написать Regex Что мне нужно:регулярных выражений первый алфавитный остальные alpanumeric

  • Чтобы начать только с: A-Z (алфавитного)
  • Мин. Длина: 5
  • Макс. Длина: 10
  • Остальные могут быть A-z0-9 (буквенно-цифровой), но содержат, по меньшей мере, один номер

Что у меня есть: ^[A-z][A-z0-9]{5,10}$

+0

И чем проблема вы столкнулись с текущим регулярным выражением? – Rajesh

+0

Вам необходимо использовать положительный lookbehind для хотя бы одного требования к числу. – wvdz

+0

Итак, ваша проблема связана с требованиями к количеству? –

ответ

4

Вы можете использовать

/^(?=.{5,10}$)[a-z][a-z]*\d[a-z\d]*$/i 

См regex demo

Детали:

  • ^ - начало строки
  • (?=.{5,10}$) - строка должна содержать от 5 до 10, отличных от символов разрыва строки символов (это будет ограниченно потребляющим рисунком позже) до конца строки
  • [a-z] - первый символ должен быть ASCII буква (i модификатор делает случай шаблон нечувствительным)
  • [a-z]* - 0+ ASCII буквы
  • \d - 1 значного
  • [a-z\d]* - 0 + ASCII цифры цифр
  • $ - конец строки.

var ss = [ "ABCABCABC1","ABCA1BCAB","A1BCABCA","A1BCAB","A1BCA","A1BC","1BCABCABC1","ABCABC","ABCABCABCD"]; // Test strings 
 
    
 
var rx = /^(?=.{5,10}$)[a-z][a-z]*\d[a-z\d]*$/i;     // Build the regex dynamically 
 
document.body.innerHTML += "Pattern: <b>" + rx.source 
 
      + "</b><br/>";        // Display resulting pattern 
 
for (var s = 0; s < ss.length; s++) {     // Demo 
 
    document.body.innerHTML += "Testing \"<i>" + ss[s] + "</i>\"... "; 
 
    document.body.innerHTML += "Matched: <b>" + rx.test(ss[s]) + "</b><br/>"; 
 
}

+0

BTW, как и для '[Az]', см. [* Почему это регулярное выражение разрешает каретку?] (Http: // stackoverflow. ком/а/29771926/3832970). –

+0

, так лучше использовать в будущем '[a-z]', но сохранить '/ i', чтобы включить чувствительность к регистру? – Froxz

+0

Вы можете использовать '/ [a-zA-Z] /' и '/ [a-z]/i' взаимозаменяемые. –

1

var pattern = /^[a-z]{1}\w{4,9}$/i; 
 

 
/* PATTERN 
 
^ : Start of line 
 
[a-z]{1} : One symbol between a and z 
 
\w{4,9} : 4 to 9 symbols of any alphanumeric type 
 
$ : End of line 
 
/i : Case-insensitive 
 
*/ 
 

 
var tests = [ 
 
    "1abcdefghijklmn", //false 
 
    "abcdefghijklmndfvdfvfdv", //false 
 
    "1abcde", //false 
 
    "abcd1", //true 
 
]; 
 

 
for (var i = 0; i < tests.length; i++) { 
 
    console.log(
 
    tests[i], 
 
    pattern.test(tests[i]) 
 
) 
 
}

+0

Это позволяет использовать строки без цифр, а также позволяет '_'. –

+1

'{1}' никогда не требуется – Fallenhero

+0

Вы также можете добавить lookahead к своему решению, что заставляет его работать и с изменением '' w 'на' [az \ d] 'для запрета подчеркивания: ['/^ [az ] (? = \ D * \ г) [аг \ д] {4,9} $/i'] (https://regex101.com/r/1m2Smm/1). Голосуйте за основную идею. –

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