#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