2013-03-23 2 views
1

Я создаю форму на своем веб-сайте для пожертвований. Я хочу, чтобы пожертвование было текстовым полем со стоимостью любой суммы в размере от 5 до 500 и для другой валюты, чтобы быть между 2000 и 200000, пожалуйста, помогите.Регулярное выражение для числа больше x и меньше y

+0

Почему вы решили использовать регулярное выражение для этого? И что у вас есть до сих пор? – nhahtdh

+0

Regex не может использоваться для этого - регулярное выражение - это язык, соответствующий шаблону. –

+0

@ bmorris591 Он может (в зависимости от языка), но это не рекомендуется. –

ответ

2

Не используйте регулярное выражение здесь

Есть слишком много способов проверить, т.е. x находится в диапазоне. Регулярное выражение вызовет проблему с производительностью.

здесь является фактическим ответ

регулярного выражения для диапазона 5 до 500:

/^(?:[5-9]|(?:[1-9][0-9])|(?:[1-4][0-9][0-9])|(?:500))$/ 

редактировать^2

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

Поскольку regex - это шаблон, соответствующий языку, мы можем сопоставлять только шаблон с ним. Итак, мы должны найти в ней какую-то модель.
Здесь узоры: 5-9 или 10-99 или 100-499 и 500.

Так что, если наше регулярное выражение /[5-9]/ будет соответствовать нашим первым. Таким образом, пришли /[1-9][0-9]/, /[1-4][0-9][0-9]/ и /500/.

Но, должен ли я проверять наши данные несколько раз?
Нет, у вас есть другой вариант.
Мы будем использовать трубку для проверки чередования.
/[5-9]|([1-9][0-9])|([1-4][0-9][0-9])|(500)/

Фактически это также должно работать нормально, но я делаю их не замаскированными. Итак, я положил ?:

+2

Хмм. Технически это хороший совет, но в качестве ответа ему не хватает альтернативного решения. – jrajav

+0

Я не думаю, что это вызовет проблемы с производительностью. Конечно, регулярное выражение может быть медленнее, но если вы не работаете с жестким циклом, то практически не будет никакой разницы. Мы выбираем обычный подход к преобразованию в число, а затем проверяем границы для ремонтопригодности. – nhahtdh

+0

@nhahtdh, производительность не является главной проблемой, основная проблема заключается в надежности, ремонтопригодности и ясности решения. Все сильно не хватает, когда вы пытаетесь проверить числовые представления с регулярными выражениями. – jrajav

0

Здесь вам не нужно использовать регулярное выражение. Просто запишите значение ввода формы и сравните его с вашим диапазоном номеров. Это очень распространенная задача в JavaScript и известна как «проверка формы».

http://jsbin.com/ihoxut/2/edit

document.forms["myform"].onsubmit = function() { 
    var donationAmount = document.getElementById('donation').value; 
    if (donationAmount > 500) { 
    alert("Too high!"); 
    return false; 
    } else if (donationAmount < 5) { 
    alert("Too low!"); 
    return false; 
    } else { 
    alert("Just right!"); 
    return false; 
    // You would actually want to return true for this one to submit the form, but that would break jsbin 
    } 
}; 
+0

Мне нужно regex cause Я использую расширение формы в своих cms, и это позволяет мне проверять использование regex – user2202289

-1

Не следует использовать регулярное выражение для него.

если вы используете PHP сделать:

if (($currency == $currency1) && ($amount >= 5) && ($amount <= 500)) { 
    echo "Between 5 and 500 at currency 1"; 
} elseif (($currency == $currency2) && ($amount >= 2000) && ($amount <= 200000)) { 
    echo "Between 2000 and 200000 at currency 2"; 
} else { 
    echo "Not a valid amount"; 
} 

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

+0

. Эта проверка должна быть обязательно сделана на стороне клиента. – jrajav

+0

Валидация здесь является лишь примером того, как это можно сделать. Предположим, вы хотите сделать это на cronjob (или просто для проверки данных клиента, потому что не все используют java), вы можете использовать этот. – chill0r

+0

Мне нужно regex, потому что я использую расширение формы в своих cms, и это позволяет мне проверять использование regex, спасибо за ваш вклад. Все пользователи – user2202289

1

Вы можете использовать регулярное выражение для этого, но имейте в виду, не за 6 месяцев вы помните, как это работает.

^(500|[1-4][0-9][0-9]|[1-9][0-9]|[5-9])$ 

Ваши другие значения будут действовать аналогично: начните с верхней границы и укажите это буквально; затем работайте до нижней границы, указав ее буквально (или в этом случае через класс символов). Каждое изменение количества цифр (например, 100 => 99) потребует нового чередования.

+0

Мне нужно regex, потому что я использую расширение формы в своих cms, и это позволяет мне проверять использование regex, спасибо за ваш вклад – user2202289

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