На сколько я помню, было правило о обязательном указании вилки зарплат. его что, сняли — плохо, весьма плохо
Здравствуйте, VovkaMorkovka, Вы писали:
VM>На сколько я помню, было правило о обязательном указании вилки зарплат. его что, сняли — плохо, весьма плохо
откуда информация? есть
правила форума job.offersАвтор: Odi$$ey
Дата: 20.05.04
Посему — если замечены такие вакансии — просьба воспользоваться модерированием и оповестить моедераторов форума.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
А почему бы не реализовать фильтрацию ещё до того, как сообщение будет создано? Т.е. просто не пускать те сообщения, в теле которых отсутствует строчка с з/п (при этом, разумеется, повесив соответствующее сообщение на странице создания сообщений). Вариантов-то не много обрабатывать придётся. Во-первых, з/п всегда тут указывается либо в рублях либо в евро либо в долларах, реже в вебманях или Яндекс-Деньгах. Итого, можно регэкспами проверять наличие соответствующих подстрок. Ниже приведён код функции, которая демонстрирует поиск подстроки с указанием з/п, функция возвращает true/false соответственно, при этом, если нужно, значение группы "G" в случае успеха будет содержать размер оплаты и описание валюты (без лишнего мусора, ну в базу там сохранить, мало ли...). Сильно не пинять, писал на коленке, если надо будет — допилю до кондиции, но в принципе оно уже работает, чуток тестов внизу, вывод там же.
Исходник:
class Program
{
static string m_RegExp =
@"(^|[\s:]+)(?<G>(от)?\s?(([1-9]+[0-9]*\s*(-|до))?\s*[1-9]+" +
@"[0-9]*\s*((т(ыс)?(\.?\s*))?р(уб)?\.?|рубл(я|ей|иков)|евр(о" +
@"|ов|иков)|долл(\.?|аров)|RUR|USD|EUR|WM\w))|((от)?\s?([$€]" +
@"\s?[1-9]+[0-9]*|[1-9]+[0-9]*\s?[$€])\s*((-|до)\s*([$€]\s?" +
@"[1-9]+[0-9]*|[1-9]+[0-9]*\s?[$€]))?))(\W+|\z)";
static bool IsMatches (string MsgBody)
{
Group group = null;
MatchCollection matches = Regex.Matches (
MsgBody,
m_RegExp,
RegexOptions.IgnoreCase);
foreach (Match match in matches)
{
group = match.Groups ["G"];
if (group.Success)
{
Console.WriteLine (group.Value);
return true;
}
}
return false;
}
static void Main ()
{
string[] msgs = {
"Бюджет 4000-6000 рублей",
"з/п: 5000 евриков",
"з/п: 1200 - 1500 долл./час",
"з/п: € 345-400",
"з/п: 10 - 12 wmz/неделя",
"80 тыс. р.\r\n",
"Оклад (обсуждается индивидуально, 60-90 тыс. руб.)",
"от 60до75 тыс. руб./net, возможно выше",
"с 50тр. в месяц",
"порядка 2200$-2500$",
"Бюджет4000-6000 рублей",
"з/п:5000-q10000 евриков",
"з/п: 1200-1500 дол./час",
"з/п: € сумма 345-400",
"з/п: 10 - 12qwmz",
"80 бтр",
"Оклад (обсуждается индивидуально, 60-90 превед тыс. руб.)",
"6O до N тыс. руб./net, невозможно выше",
"с50тр. в месяц",
"порядка 2200-2500$"};
for (int i = 0; i < msgs.Length; i ++)
{
if (! IsMatches (msgs [i]))
{
Console.WriteLine ("Message {0}: no match.", i + 1);
}
}
}
Вывод (10 подходящих текстов и 10 содержащих ошибку):
4000-6000 рублей
5000 евриков
1200 - 1500 долл.
? 345
10 - 12 wmz
80 тыс. р.
60-90 тыс. руб.
от 60до75 тыс. руб.
50тр.
2200$-2500$
Message 11: no match!
Message 12: no match!
Message 13: no match!
Message 14: no match!
Message 15: no match!
Message 16: no match!
Message 17: no match!
Message 18: no match!
Message 19: no match!
Message 20: no match!