Задача: посчитать количество точек внутри и по периметру прямоугольника.
Точки расставлены на расстоянии 3 метра друг от друга, т.е. ширина и длина кратны 3.
Внешние = ((ширина+длина)*2)/3
Всего = ((ширина/3)+1)*((длина/3)+1)
Внутренние = всего - внешние
Последний рабочий вариант:
function validateVin(vin){
var re=new RegExp("^[A-HJ-NPR-Z\\d]{13}\\d{4}$","i");
return vin.match(re);
}
Остальные промежуточные относительно рабочие:
function validateVin(vin){
var re=new RegExp("^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$");
return vin.match(re);
}
Обновлено:
1. Не учитываем регистр:
function validateVin(vin){
var re=new RegExp("^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$","i");
return vin.match(re);
}
2. Некоторые корректные VIN-номера все равно не проходят проверку, поэтому делаем дополнительную проверку на то что в строке:
- только латиница и цифры;
- нет символов I, O и Q;
- последние 4 символа — цифры.
$('#form').on('submit',function(){
var error='';
var vin=$("input[name=carVIN]").val();
if(!validateVin(vin)){
var Reg=new RegExp("^[a-zA-Z0-9]+$");
if(Reg.test(vin)&&vin.toLowerCase().indexOf("i")==-1&&vin.toLowerCase().indexOf("o")==-1&&vin.toLowerCase().indexOf("q")==-1&&vin.length>4&&$.isNumeric(vin.slice(-4))){
var res=confirm('Неправильное заполнения VIN-номера повлияет на время обработки заявки');
if(res==false) return false;
}
else{
error+='VIN указан неверно\r\n';
}
}
if(error!=''){
alert(error);
return false;
}
});
Второе можно попробовать сделать одним регулярным выражением. Или исправить что-то в первом…
Обновлено 2:
В примерах выше, 9 символ обязательно должен быть либо X либо цифра, но на практике встречаются vin с другими символами. Поэтому можно упростить:
function validateVin(vin){
var re=new RegExp("^[A-HJ-NPR-Z\\d]{13}\\d{4}$","i");
return vin.match(re);
}
Еще вариант (на практике не подошел):
valid_vin=function(vin){
no_ioq='[a-hj-npr-z0-9]';
matcher=new RegExp("^"+no_ioq+"{8}[0-9xX]"+no_ioq+"{8}$",'i');
if(vin.match(matcher)==null)
return false;
return check_digit_check(vin);
};
check_digit_check=function(vin){
cleaned_vin=vin.toUpperCase();
letter_map={A:1,B:2,C:3,D:4,E:5,F:6,G:7,H:8,J:1,K:2,L:3,M:4,N:5,P:7,R:9,S:2,T:3,U:4,V:5,W:6,X:7,Y:8,Z:9,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,0:0};
weights=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];
products=0;
for(var i=0;i<cleaned_vin.length;i++) {
products+=letter_map[cleaned_vin[i]]*weights[i];
}
check_digit_should_be=products%11;
if(check_digit_should_be==10) check_digit_should_be='X';
return check_digit_should_be==cleaned_vin[8];
}
Источники:
http://stackoverflow.com/questions/26407015/javascript-jquery-vin-validator
https://en.wikipedia.org/wiki/Vehicle_identification_number
https://github.com/bradg/vin-js
Например имеем код:
<ul id="service_filter">
<li class="active"><a href="#" data-service="0">Все</a></li>
<li><a href="#" data-service="1">Услуга 1</a></li>
<li><a href="#" data-service="2">Услуга 2</a></li>
<li><a href="#" data-service="3">Услуга 3</a></li>
</ul>
<div class="article_item" data-services="'1'">Описание 1</div>
<div class="article_item" data-services="'1','2','3'">Описание 2</div>
<div class="article_item" data-services="'3'">Описание 3</div>
$(document).ready(function(){
$('ul#service_filter li a').on('click',function(){
var service=$(this).data('service');
$(this).closest('ul').find('li').removeClass('active');
$(this).parent().addClass('active');
if(service=='0'){
$('.article_item').fadeIn();
}
else{
$('.article_item').fadeOut();
$('.article_item').each(function(i,el){
var id="'"+service+"'";
if($(el).data('services').search(id)!=-1){
$(el).fadeIn();
}
});
}
return false;
});
});
В таком случае второй div.article_item будет показан при клике по любой ссылке, а 1 и 3 только по 1 и 3 соответственно.
Получить value всех отмеченных checkbox в блоке, перечисленные через запятую.
$('.catalog a.submit').live('click',function(){
var options=[];
$.each($(".catalog input[type=checkbox]:checked"),function(){
options.push($(this).val());
});
alert(options);
return false;
});
Проверить, что строка содержит только кириллицу:
if(preg_match('/^[а-яё]++$/ui',$letter)){
//...
}
В примере URL
http://revolution.rhga.ru/section/detail.php?section=obrazy-revolucii&element=za-velikuyu-edinuyu-i-nedelimuyu-rossiyu&sphrase_id=4555549
нужно привести к виду
http://revolution.rhga.ru/section/obrazy-revolucii/za-velikuyu-edinuyu-i-nedelimuyu-rossiyu.html
1. Получим массив параметров и их значений:
function format_url($url){
$result=array();
$pu=parse_url($url);
if($pu['query']){
$parts=explode('&',html_entity_decode($pu['query']));
foreach($parts as $part){
$param=explode('=',$part);
$result[$param[0]]=$param[1];
}
}
return $result;
}
print_r(format_url($url));
Array
(
[section] => obrazy-revolucii
[element] => za-velikuyu-edinuyu-i-nedelimuyu-rossiyu
[sphrase_id] => 4555549
)
2. Затем сформируем URL в нужном нам формате:
function format_url($url){
$result=$url;
$arr=array();
$pu=parse_url($url);
if($pu['query']){
$parts=explode('&',html_entity_decode($pu['query']));
foreach($parts as $part){
$param=explode('=',$part);
$arr[$param[0]]=$param[1];
}
if($arr['section']&&$arr['element']){
$result='/section/'.$arr['section'].'/'.$arr['element'].'.html';
}
}
return $result;
}