#javascript #regex
#javascript #регулярное выражение
Вопрос:
Каким было бы регулярное выражение для чисел в диапазоне 1-10 и 1-5? Пожалуйста, помогите этой обеспокоенной душе.
Комментарии:
1. Почему вы хотите сделать это с регулярным выражением в первую очередь?
2. Зачем использовать регулярное выражение для тестирования числового диапазона?
3. Мне нужно проверить ввод от пользователя для моего текстового поля. Допустимые значения перед отправкой формы — 1-10 для 1 поля и 1-5 для другого. Что-то вроде var validrange= /^[0-9] /; или что-то еще, но мне нужен правильный формат!!
4. @ValianthX Так что используйте
parseInt()
и проверяйте1 ≤ n ≤ 10
5. Регулярные выражения не являются подходящим инструментом для этого. Используйте обычное сравнение чисел.
Ответ №1:
Вы могли бы достичь этого с помощью простых проверок чисел в javascript:
// Convert input to integer just to be sure
mynum = parseInt(mynum, 10);
// Check number-range
if(mynum >= 1 amp;amp; mynum <=10)
and
if(mynum >= 1 amp;amp; mynum <=5)
Если вы действительно хотите использовать регулярное выражение:
/^([1-9]|10)$/
and
/^[1-5]$/
Обновить:
- Исправлено, что первое регулярное выражение правильно соответствовало ограничениям строки
- Добавлен parseInt к первому примеру, чтобы обеспечить правильную проверку чисел
Комментарии:
1. также первое регулярное выражение соответствует 0. 🙂
2.
parseInt()
в качестве основного аргумента следует указать (заглавную I).parseInt( mynum, 10 )
3. Регулярное выражение по-прежнему неточно.
^
Применяется только к первой альтернативе, и$
только к10
. Так что5555
будет соответствовать, как иxxxxx10
.4. Ты хочешь свести меня с ума, не так ли? 🙂 Спасибо за ввод
Ответ №2:
Это не очень хорошее использование регулярных выражений.
Используйте простые условия:
if (x > 0 amp;amp; x < 6) {
// x is 1 - 5
}
if (x > 0 amp;amp; x < 10) {
// x is 1 - 10
}
Ответ №3:
Для 1-5 вам нужно только заключить его в качестве символьного класса:
/^[1-5]$/
Для 1-10 вам просто понадобится дополнительная альтернатива:
/^([1-9]|10)$/
Комментарии:
1. Что, если входные данные задаются как «03» или «3.0»?
2. @patrick: Предполагается, что оба теста не пройдут этот тест. Если требуется сравнение целых чисел или чисел с плавающей запятой вместо проверки строкового формата, то регулярное выражение требует слишком больших усилий.
3. Учитывая, что оно предназначено для проверки (предположительно пользовательского ввода), я бы сказал, что этим возможностям следует уделить внимание, и я бы согласился, что «регулярное выражение требует слишком больших усилий» .
4. @patrick: Я бы сказал, что это слишком много усилий, если действительно выполняется как проверка Javascript. Однако, если это должно было использоваться как
<input pattern=
регулярное выражение, это вполне могло бы сэкономить некоторое количество ввода. (Но так было бы type = number с min= max =)
Ответ №4:
Есть ли причина, по которой вы хотите использовать регулярные выражения?
/([1-9]|10)/
Ответ №5:
Используйте числовое сравнение. Следующее расширение числа может проверять, попадает ли число между двумя значениями:
Number.prototype.between =
function(lower,upper, includeBoundaries){
lower = Number(lower);
upper = Number(upper);
noCando = isNaN(lower) ||
isNaN(upper) ||
lower>=upper;
if ( noCando ) {
throw 'wrong arguments or out of range';
}
return includeBoundaries
? this >= lower amp;amp; this <= upper
: this > lower amp;amp; this < upper
};
// usage:
(12).between(1,12); /=> false
(12).between(1,12,true); /=> true
(12).between(0,15,true); /=> true
(0).between(-5,1); //=> true
Функция преобразует параметры в число, потому что 0 может принимать логическое значение в javascript, чтобы иметь возможность проверить, являются ли параметры действительными числовыми значениями, и иметь возможность проверить, не больше ли lower / равно upper. В таких случаях выдается ошибка.
includeBoundaries
Параметр также проверяет, равно ли число меньшему или большему значению, если оно не указано, функция возвращает реальную проверку «между».
Ответ №6:
Для 1-10 это может быть
/^([1-9]|10)$/
а для 1-5 просто
/^[1-5]$/
Ответ №7:
Ответ был бы
/^([1-9]|10)$/