onsdag 27 juni 2012

Visual Studio Tips & Trix vol 1

Idag tänkte jag ta upp 3 saker i Visual Studio som underlättar min vardag. 


1. Macro för att automatiskt göra en "attach to process" på samtliga w3wp.exe processer.


Denna killen skriver det så bra så jag länkar dit istället:
http://blogs.msdn.com/b/jannemattila/archive/2008/10/30/attaching-debugger-to-w3wp-exe-using-nice-and-easy-keyboard-shortcut.aspx

Gör kort och gôtt vad rubriken säger :)

Obs. Ibland lyckas VS hänga sig friskt med detta macro.

2. CTRL + . (punkt)

Ni vet när man anropar en klass i nåt namespace som ännu inte lagts till och man måste hovra med muspekaren, plocka upp meny samt välja using direktivet.











Well, CTRL + . plockar fram det så man bara kan smacka ENTER (ev. piltangent också) och så är det klart. Risken för musarm är nu avsevärt mindre.

3. CTRL + , (komma)

Öppnar upp "Navigate to"-fönstret. Här är det bara att börja mata in namnet på filen/klassen/metoden/propertyn/variabeln man letar efter och voila, så dyker den upp. Gött! Funkar väl inte riktigt på alla variabler och kan vara svåröversiktligt i riktigt stora projekt, men ändå riktigt trevlig funktion. Finns tyvärr enbart i Visual Studio 2010 men antagligen finns det tredjepartsplugins som grejjar biffen i de äldre versionerna.



Nu kommer jag inte på några mer för stunden, men tipsa gärna om era egna guldkorn!

tisdag 26 juni 2012

Validera personnummer med javascript

Idag skulle jag skriva ett enkelt javascript för att validera svenska personnummer med javascript.

Googlade lite men hittade inget jag gillade. Ett oläsligt script i sourcen på http://www.personnummer.nu/ och ett annat som inte webbläsaren köpte på http://0x539.se/validera-personnummer-med-jquery-validation/

Därför skrev jag mitt eget bidrag, som tolererar personnummer i följande format:

ååmmddxxxx 
ååmmdd-xxxx
ååååmmddxxxx
ååååmmdd-xxxx

samt kollar checksum på sista siffran mha. Luhn.



var validatePersonalNumber = function(input) {
    // Check valid length & form
    if (!input) return false;

    if (input.indexOf('-') == -1) {
        if (input.length === 10) {
            input = input.slice(0, 6) + "-" + input.slice(6);
        } else {
            input = input.slice(0, 8) + "-" + input.slice(8);
        }
    }
    if (!input.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})|(\d{4})(\d{2})(\d{2})\-(\d{4})$/)) return false;

    // Clean input
    input = input.replace('-', '');
    if (input.length == 12) {
        input = input.substring(2);
    }

    // Declare variables
    var d = new Date(((!!RegExp.$1) ? RegExp.$1 : RegExp.$5), (((!!RegExp.$2) ? RegExp.$2 : RegExp.$6)-1), ((!!RegExp.$3) ? RegExp.$3 : RegExp.$7)),
            sum = 0,
            numdigits = input.length,
            parity = numdigits % 2,
            i,
            digit;

    // Check valid date
    if (Object.prototype.toString.call(d) !== "[object Date]" || isNaN(d.getTime())) return false;

    // Check luhn algorithm
    for (i = 0; i < numdigits; i = i + 1) {
        digit = parseInt(input.charAt(i))
        if (i % 2 == parity) digit *= 2;
        if (digit > 9) digit -= 9;
        sum += digit;
    }
    return (sum % 10) == 0;
};


Edit 2012-10-24: Redigerat raden var d = new Date(...) som inte gillades av IE (tack till Raita som uppmärksammade detta).

Hoppas någon annan har nytta av det! :)