Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/35: Рейтинг темы: голосов - 35, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36

Доработать функцию проверки валидности МАС-адреса

11.01.2012, 09:17. Показов 6865. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И так функция делает проверку верности ввода МАС-адреса
[согласно маске - допустимые символы 0-9, A-F, 6 пар таких символов разделенных :]
Проверяемое поле является массивом, в каждый элемент которого может содержать необходимый к проверке МАС-адрес. При первом же не соответствии при проверке результат функции false и если все нормально то результат true.

-Правильно ли в 8-й строке после равно описано выражение (может его надо в кавычки или еще что)
-Ну и при компиляции 10 строка дает ошибку синтаксическую

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function CheckMACAddress ( MACAddress )
{
for (var i = 0; i < MACAddress.length; i++)
{
    if (macAdd[i].length == 17)
    {
        var RegExPattern = /^([\d[A-F]{2}:){5}[\d[A-F]{2}$/;
        if (RegExPattern.test(macAdd[i]))
        else
        return
    }
    else
    return false;
}
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2012, 09:17
Ответы с готовыми решениями:

Как изменить скрипт проверки валидности адреса?
Допустим, имеем сайт http://www.mercurymagazines.com/pr1/100/10000 , позволяющий оформить бесплатную подписку на журналы . Заполнив...

Есть ли в ASP.NET встроенное средство для проверки валидности email адреса
Есть ли в ASP.NET встроенное средство для проверки валидности email адреса? Не хочется проверять на наличие 1-го &quot;@&quot;, на &gt;=1...

Проверка валидности адреса электронной почты
Здравствуйте. как реализовать следующее: в textbox вводится e-mail необходимо чтобы он был (символы)@mail.ru или (символы)@inbox.ru ...

14
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36
11.01.2012, 11:08  [ТС]
Переделал теперь вот так(var вынес в начало и второй if подправил), критика\правка велком

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function CheckMACAddress ( MACAddress )
{
var RegExPattern = /^([\d[A-F]{2}:){5}[\d[A-F]{2}$/;
for (var i = 0; i < MACAddress.length; i++)
{
    if (macAdd[i].length == 17)
    {
        if (!(RegExPattern.test(macAdd[i])))
        return false;
    }
    else
    return false;
}
}
0
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
11.01.2012, 18:36
Тут возможно несколько способов реализации, рассмотрим два самых простых:

1) Использование только регулярного выражения
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function CheckMACAddress (MACAddress)
{
   //флаг, по умолчанию все mac-адреса верны (т.е. true)
   var valid = true;
   for (var i=0; i<MACAddress.length; i++)
   {
       //64:A2:C7:B0:D3:B2 - пример правильного mac-адреса
       var regex = /^([A-F|0-9]{2}:){5}[A-F|0-9]{2}$/;
       if (!regex.test(MACAddress[i]))
       {
    valid = false;
    break;
       }
   }
   return valid;
}
2) Использование регулярного выражения и разбиения строки с mac-адресом
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function CheckMACAddress (MACAddress)
{
   //флаг, по умолчанию все mac-адреса верны (т.е. true)
   var valid = true;
   //Проверка входного параметра
   if (!MACAddress instanceof Array || MACAddress.length == 0)
      return false;
                
   for (var i=0; i<MACAddress.length; i++)
   {
      // Разбиение mac-адреса на элементы по символу ':'
      // elementsMacAddress - массив такого формата:
      //    mac-адрес: 64:A2:C7:B0:D3:B2
      //    массив: ['64','A2','C7','B0','D3','B2']
      var elementsMacAddress = MACAddress[i].split(':');
      // В массиве должно быть ровно шесть элементов mac-адреса
      if (elementsMacAddress.length == 6)
      {
          var regex = /^[A-F|0-9]{2}$/;
          // Перебор всех компонентов mac-адреса
          for (var j=0; j<elementsMacAddress.length; j++)
          {
       if (!regex.test(elementsMacAddress[j]))
              {
           valid = false;
           return valid;
       }
          }
      }
      else
      {
          valid = false;
          break;
      }
   }
   return valid;
}
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36
12.01.2012, 09:36  [ТС]
Vicont - спасибо за развернутый ответ.

Уточню свою задачу.
Скрипт(функция) запускается только тогда когда поле передаваемое в функцию либо не пустое (при создании некоего объекта содержащего это поле) либо не пустое и не такое же как было (при изменении объекта). Поэтому проверять внутри функции на не пустоту не надо.

Строку
JavaScript
1
if (macAdd[i].length == 17)
поставил с тем чтобы зазря не проводить проверку по символам если уже по длине не верно.

Добавлено через 14 часов 1 минуту
Может тогда вот так будет вернее ?
Я правильно понимаю что любой из 2-х "break" переведет на строку 22 прервав цикл?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function CheckMACAddress ( MACAddress )
{
var valid = true;
var RegExPattern = /^([\d[A-F]{2}:){5}[\d[A-F]{2}$/;
    for (var i = 0; i < MACAddress.length; i++)
    {
        if (MACAddress[i].length == 17)
        {
            if (!(RegExPattern.test(MACAddress[i])))
            {
              valid = false;
              break;
            }
        }
        else
            {
              valid = false;
              break;
            }
    }
return valid;
}
0
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
12.01.2012, 10:24
Цитата Сообщение от ALARMus Посмотреть сообщение
Я правильно понимаю что любой из 2-х "break" переведет на строку 22 прервав цикл?
Совершенно верно.
0
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36
12.01.2012, 17:22  [ТС]
Насчет "break", спасибо за пояснение.

А в целом код
1) не содержит ошибок ?
2) свое предназначение выполнит полностью (т.е. поставленную задачу решит) ?

Добавлено через 5 часов 44 минуты
3) можно как то сделать, чтобы RETURN возвращал не переменную, а сразу TRUE или FALSE (соответсвенно)
0
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
12.01.2012, 17:26
1) нет не содержит.
2) это уже зависит от Вас, решение какой задачи хотите реализовать.
3)можно:
замените:
JavaScript
1
2
valid = false;
break;
на:
JavaScript
1
return false
и
JavaScript
1
return valid;
на:
JavaScript
1
return true;
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36
13.01.2012, 09:01  [ТС]
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function CheckMACAddress ( MACAddress )
{
var RegExPattern = /^([\d[A-F]{2}:){5}[\d[A-F]{2}$/;
    for (var i = 0; i < MACAddress.length; i++)
    {
        if (MACAddress[i].length == 17)
        {
            if (!(RegExPattern.test(MACAddress[i])))
              return false;
        }
        else
              return false;
    }
return true;
}
еще парочка уточняющих вопросов.
1) return так же как и break останавливает дальнейшее выполнение функци (цикла внутри нее, условий,...) и сразу же передает результат в место вызова функции ?
2) в предыдущем варианте return valid - передает переменную valid или значение переменной valid ?
0
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
13.01.2012, 11:19
1) Управляющая инструкция return завершает выполнение функции и передает значение правого операнда в качестве значения функции:

JavaScript
1
2
3
4
5
6
furntion test(){
  var a = 4;
  return a;
}
 
b = test(); // b равно 4
Break останавливает текущий цикл и передаёт управление следующей инструкции сценария после данного цикла.

2) Return передает значение переменной
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36
13.01.2012, 11:41  [ТС]
т.е. коды в 4-м и 8-м постах дадут одинаковый результат ?
0
front-end developer
 Аватар для Vicont
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
13.01.2012, 11:44
Да...тут все приведенные коды одинаковые, только применяются разные варианты конструкций)
0
i_domovoy
15.06.2012, 03:34
Добрый день! я конечно слаб в java но просмотрев эти коды для проверки mac адреса я понял что не один из них нерабочий.
1.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function CheckMACAddress (MACAddress)
{
   //флаг, по умолчанию все mac-адреса верны (т.е. true)
   var valid = true;
   for (var i=0; i<MACAddress.length; i++)---> Непонятно зачем???
   {
       //64:A2:C7:B0:D3:B2 - пример правильного mac-адреса
       var regex = /^([A-F|0-9]{2}:){5}[A-F|0-9]{2}$/; ---->здесь 17 раз объявляем переменную 
       if (!regex.test(MACAddress[i])) --------> здесь мы получим ошибку ещё при нулевом значении
       {
    valid = false;
    break;
       }
   }
   return valid;
}
вообще не понятно зачем на да было разбирать MAC адрес на куски когда в regex прописан шаблон
для целого 17 значного значения
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function macAdd(MACAddress)
{
  var regex = /^([A-F|0-9]{2}:){5}[A-F|0-9]{2}$/;
  if (!regex.test(MACAddress))
     {
     alert('Не коректный MAC адреса: ' + MACAddress);
     return;
     }
  alert("ok");
  return;
}
Как по мне этого было бы достаточно, а что бы не было соблазна ввести больше 17 символов, то для этого в input прописать максимальное значение 17 и всё.
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36
15.06.2012, 09:15  [ТС]
Итоговый код получился таковым

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function CheckMACAddress ( MACAddress )
{
var ErrMessage1="Общая длина строки МАС-адреса должна состоять из 17 символов";
var ErrMessage2="Строка символов МАС-адреса не соответствует маске ввода: цифры->'0-9', латинские символы->'A-F' и разделитель ':'";
var RegExPattern = /^([\d[A-F]{2}:){5}[\d[A-F]{2}$/;
print ("Start check MAC-address !!! Длина массива - "+MACAddress.length());
 
    for (var i = 0; i < MACAddress.length(); i++)
    {
        print ("Length of array element - "+MACAddress[i].length);
        if (MACAddress[i].length == 17)
        {
            if (!(RegExPattern.test(MACAddress[i])))
            {
                system.functions.rtecall("callrad", vars.$L_rc, "mb.ok","text",ErrMessage2,true); 
                print (i+"-й элемент ="+MACAddress[i]+" не соответствует маске");
                return false;
            }
        }
        else
        {
            system.functions.rtecall("callrad", vars.$L_rc, "mb.ok","text",ErrMessage1,true); 
            print ("Длина строки МАС-адреса не равно 17 ->"+MACAddress[i].length);
            print ("false");
            return false;
         }
    }
print ("true");
return true;
}

1) проверка на длину в 17 символов производится в скрипте - так как в вводном поле ограничить длину нельзя (такое приложение - но может использовать JS)
2) зачем она вообще производиться если далее по маске проверка - так для некого ускорения - "не надо проверять по маске если сразу не совпадает по длине"
3) проверка на длину отдельно от проверки по маске как видно дает дополнительную, так сказать расширенную диагностическую информацию по ошибке допущенной пользователем при вводе (длина не подходит или символы не те)
4) почему функция начинается с for - потому что в моем случае МАС адрес это не строка, а массив строковый - и МАС адресов, соответственно, может быть n-ое количество в этом массиве.
5) результат работы данной функции передается вызвавшей программе которая имеет простейшие проверки (true или false) и может уже на основании этой проверки своим интерфейсом сказать пользователю что запись не сохраню так как проверка не пройдена (хотя тут в JS вызывается всплывающее окно с предупреждением)
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
15.06.2012, 13:57
ALARMus, это вы на каком языке код нарисовали?

Если что:
а) здесь форум языка Javascript
б) в языке Javascript нет метода (функции, оператора) print ()

Зачем здесь вываливать какую-то муть на непонятно каком языке?

-----
В DHTML имеется метод window.print (), однако он распечатывает не строку, коя у него в скобках, а ВСЁ ОКНО.
0
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 36
15.06.2012, 17:03  [ТС]
Прошу прощения, это была отладочная строка того приложения которое помимо своего языка может использовать JS

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function CheckMACAddress ( MACAddress )
{
var RegExPattern = /^([\d[A-F]{2}:){5}[\d[A-F]{2}$/;
    for (var i = 0; i < MACAddress.length(); i++)
    {
        if (MACAddress[i].length == 17)
        {
            if (!(RegExPattern.test(MACAddress[i])))
                return false;
        }
        else
        return false;
        
    }
return true;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2012, 17:03
Помогаю со студенческими работами здесь

Смена Мас адреса
Подскажите, сегодня подключился к провайдеру Горсеть и при подключении я спросил у техника как выполняется подключение что бы потом самому...

Нету мас адреса?
Хотел узнать свой мас адрес, смотрю а его и нет зы В виртуалке мас адрес есть! Еще вопрос- как сменить мас адрес? Поставил софт...

Формат МАС адреса
Добрый день! Помогите пожалуйста с регулярными выражениями, 1. есть переменная в ней содержится mac в формате 11:22:33:44:55:66 а...

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

Регулярное выражение для проверки валидности email
Привет, Релиб! Подскажите, пожалуйста, как верно составить регулярное выражение для проверки email (правда, я использую его на asp с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru