Главная » Файлы » JS скрипты » JS скрипты

Регулярное выражение для проверки RGB и RGBA
16.07.2016, 06:20
Для очередной версии одной из моих программ мне понадобилось проверить действительно ли я получаю из буфера обмена строку похожую на RGB(123, 45, 99); или RGBA(123, 45, 99, 0.199);.
Всё что удалось найти с помощью поисковиков было не полноценной проверкой и требовало дополнительных проверок.
Пришлось самому писать, вот что получилось.
Для запуска этого кода используйте старую Оперу или Firefox, эти браузеры дают возможность просмотреть большие объёмы информации, у них Alert() со скролом.

Составные части регулярки
var s="", k=999, s1="", s2="";
/*
для проверки регулярки создаём хитрый цикл длиной 0-999
всё что регулярка сочтёт правильным, будет положено в строку
и по завершении цикла выдано алертом
*/
while(k--){
/*

разделим регулярку на части
первая 200-205, 210-215, 220-225, 230-235, 240-245, 250-255 = /2[0-5][0-5]/
вторая 206-209, 216-219, 226-229, 236-239, 246-249 = /2[0-4]\d/
третья 100-199 = /1\d\d/
четвёртая 0-99 = /\d{1,2}/
такой регуляркой проверяется одно значение R или G или B, 0-255
*/
(""+k).replace(/^(?:2[0-5][0-5]|2[0-4]\d|1\d\d|\d{1,2})$/, function(a){
s=s+a+"\n"
//alert(s);
})};
alert(s);

/*
прозрачность может представлять собой десятичное число 0-1
браузеры понимают три знака после запятой, тремя мы и ограничим
также браузеры понимают дробь без старшего нуля, учтём и это
ну и целые числа 0 и 1 тоже будем искать
*/

s=""; k=9999;
while(k--){
s1=""+k;
s2=k>=1000?s1.charAt(0)+"."+s1.slice(1):"0."+s1
/*
1 или 0, или десятичная дробь 0.0 - 0.999, или дробь без нуля .456
*/
s2.replace(/^(?:1|0|0*(?:\.\d{1,3}))$/, function(a){
s=s+a+"\n"
})};
alert(s);
/*
отдельно показываем нахождение 0 и 1, в цикл их сложно засунуть
*/
"0".replace(/^(?:1|0|0*(?:\.\d{1,3}))$/, function(a){
alert(a);
});

"1".replace(/^(?:1|0|0*(?:\.\d{1,3}))$/, function(a){
alert(a);
});


Собираем регулярку в одну кучу
var re1, re2, re3, re4, re5, str;
re1=/[^\(\)\d,]/g;
re2=/[^\(\)\d,\.]/g;
re3="(?:2[0-5][0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})";
re4="(?:1|0|0*(?:\\.\\d{1,3}))";

str="rgb(123, 45, 99);";

// вот такая в пол руки получается регулярка для RGB
alert(new RegExp("^\\("+re3+","+re3+","+re3+"\\)$"));

str=str.replace(re1, "");// чистим лишнее, оставляем (123,45,99)
alert(str);
re5="^\\("+re3+","+re3+","+re3+"\\)$"
str.replace(new RegExp(re5), function(a){
alert(a);// алерт увидим если это было правильное RGB

});

str="RGBA(123, 45, 99, 0.199);";

// вот такая более чем в пол руки получается регулярка для RGBA
alert(new RegExp("^\\("+re3+","+re3+","+re3+","+re4+"\\)$"));

str=str.replace(re2, "");// чистим лишнее, оставляем (123,45,99)
alert(str);
re5="^\\("+re3+","+re3+","+re3+","+re4+"\\)$"
str.replace(new RegExp(re5), function(a){
alert(a);// алерт увидим если это было правильное RGBA

});


С их помощью было создано это регулярное выражение Неочевидные возможности регулярки
Регулярное выражение для проверки возраста
Категория: JS скрипты | Добавил: newjs | Теги: проверка, Регулярное, RGB, RGBA, выражение
Просмотров: 1179 | Загрузок: 0 | Рейтинг: 5.0/1
Всего комментариев: 0
avatar