Регулярное выражение: Значения, разделенные запятыми, ограничены 8 числами

#javascript #regex

Вопрос:

Я работаю над регулярным выражением для сопоставления значений, разделенных запятыми, с ограничением до 8 символов или менее.

Значения, разделенные запятыми, могут содержать только числа.

Чего я пытаюсь добиться, так это того, что я хочу применить регулярное выражение к полю ввода. где 1 >= digits <= 8 допускаются только числовые значения.

и если пользователь хочет добавить несколько значений, они должны быть разделены запятыми (,).

Например: 1148927,1216814,1212327,1213381,1213274,1211982,1149123,1149628 — Допустимо, так как каждое значение
7,14,227,2181,13274,211982,1149123,10149628 — Допустимо, так как каждое значение содержит от 1 до 8 цифр
1148927,1216814,121212122123359,1212327,1213381,1213274,1211982,1149123,1149628 — Недействителен

до сих пор мне удается этого добиться

/^[0-9]{8}(?:,[0-9]{8})*$/gm

Проблема в том {8} matches the previous token exactly 8 times , что я хочу, чтобы это совпадало где угодно до 8.

Я знаю, что я довольно близок, не в состоянии получить это последнее регулярное выражение.

Комментарии:

1. Вы можете указать диапазон, например {1,8} , который означает от 1 до 8 символов

2. /^d{1,8}(?:,d{1,8})*$/gm это позволило бы создать разделенный запятыми список из 1-8 цифр.

Ответ №1:

Проблема в {8} том, что требуется ровно 8 совпадений. Вы должны использовать что-то вроде {1,8} :

 /^[0-9]{1,8}(?:,[0-9]{1,8})*$/gm
 

И если вы хотите разрешить необязательную конечную запятую:

 /^[0-9]{1,8}(?:,[0-9]{1,8})*,?$/gm
 

Комментарии:

1. О, хорошо! Это хорошо работает. Глупышка! Хотя это позволяет только 7,14,227,21213281,13274 , но терпит неудачу 7,14,227,21213281,13274, . означает запятую в конце. Это также должно позволять.

2. @shivamdixit Разрешить запятую в конце так же просто, как добавить ,? .

Ответ №2:

Вы можете использовать диапазон {min, max}

 /^[0-9]{1,8}(?:,[0-9]{1,8})*$/gm