Regex för att validera emailadress

Är absolut inget duktig på RegEx utan förlitar mig alltid på andras uttryck. För att validera email brukar jag använda följande:

[\w\x2E]{2,}\x40{1}[\w\x2E]{2,}\x2E{1}[\w\x2E]{2,}

Blev idag kontaktad av en besökare som hade problem med att skriva in sin hotmail som innehöll ett bindestreck. Hittade ett altenativ som verkar fungera bättre och accepterar bindestreck.

^[\w\.\-_]+@([\w\.\-_]+\.)+[A-Za-z]{2,4}$

By Jesper Lind

Buggsök: Tid i textBox med CalendarExtender

En bloggeditor spelade spratt med oss. Tiden i datumet då det postades ändrades till midnatt (00:00:00) då och då. Trodde först det var nån databas-grej, men när jag debuggade så kom jag på att vår ajax-kalender var felinställd. Så här såg den ut.

<asp:TextBox Font-Size="10px" ID="uxPublishedDate" Width="100"
         Text='<%# Bind("PublishedDate") %>'
         runat="server" />
         <ajaxToolkit:CalendarExtender runat="server"
         ID="CalendarExtender1"
         TargetControlID="uxPublishedDate"
         Format="yyyy-MM-dd HH:mm:ss">
         </ajaxToolkit:CalendarExtender>

När jag tog bort Format="yyyy-MM-dd HH:mm:ss" fungerade det bättre och tiden behölls.

By Jesper Lind

Uppdatera databasfält till inledande versal följt av gemener

Vi hade en databas med massa postorter i versaler (ALINGSÅS, GÖTEBORG, STOCKHOLM) osv men ville ha dem så här istället (Alingsås, Göteborg, Stockholm).

Hittade tips i ett forum hur man gör.

Först för en SELECT för att testa:

SELECT UPPER(left(CityName, 1)) + substring(LOWER(CityName), 2, LEN(CityName))  FROM [Cities]

Och sen en UPDATE som ändrar fältet:

UPDATE Cities SET CityName = UPPER(left(CityName, 1)) + SUBSTRING(LOWER(CityName), 2, len(CityName))

By Jesper Lind

Flera Visual Studio-projekt i samma Solution

Försökte just att skapa en "blank solution" i Visual Studio 2008 men den vägrade att låta mig ladda in mer än ett projekt.

Efter ett tag förstod jag att mina inställningsfiler hade återställts till default pga av mappbyte. Hittade tips hos Paul June om hur man skulle ställa in det rätt igen.

Gå till Tools/Options/Projects and Solutions och klicka i rutan "Always show solution".

By Jesper Lind

Bättre låta servrarna logga ut oaktiva uppkopplingar

Råkade ut för det idag att möjliga uppkopplingar tog slut på en server. Tänkte att det är väl ingen fara eftersom jag har mitt gamla knep som brukade gå att köra från en XP-burk.

Men tyvärr inte heller det gick denna gången och jag fick bara "The terminal server has exceeded the maximum number of allowed connections" tillbaka som svar.

Som tur skedde det under dagtid så jag kunde ringa vår support. Men när såna här grejer sker under nattliga uppgraderingar kan det bli riktigt jobbigt.

Jag ställde därför in Terminal Services Configuration på alla våra servrar så att oaktiva uppkopplinga kommer självdö efter tre timmar. Hittade en bra beskrivning hos TechnoBuff.

Nu känns det hela mycket säkrare.

By Jesper Lind

Ändra Collation på databas i SINGLE_USER-läge

Om man vill ändra Collation på en databas kan det vara svårt ifall man har andra användare uppkopplade. Detta blockerar kommandot och man får "The database could not be exclusively locked to perform the operation".

För att komma runt problemet kan man gå in i "SINGLE_USER"-läge (Glöm inte att gå tillbaks till "MULTI_USER" efter åt.

ALTER DATABASE <DBNAME> SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

ALTER DATABASE <DBNAME>
COLLATE SQL_SwedishStd_Pref_CP1_CI_AS;
GO

ALTER DATABASE <DBNAME> SET MULTI_USER
GO
By Jesper Lind

Blog in application - how to make rss feeds private?

(Detta inlägg är ett svar till en engelsk blog, men postar den här också på vår svenska sajt)

Ayende writes an interesting post about the how idea of having a blog incorporated in your application can be a clever idea.

I have been thinking of this concept myself for a admin system I am developing. I think that a rss feed would be very handy but havn't been able to figure out how to make it private. Think I read somewhere about a way to put password on a feed, but some of the big rss readers does not support it yet (for example Google Reader).

One of the commenters to Ayende's post gave me a tip worth checking out. Unfortunatly it only works in Outlook / IE.

If you want to make RSS feeds private the easiest way (that works with Outlook at least) is to enable HTTP Basic Authentication and visit the RSS feed with IE to input credentials and check the option to save them. Then Outlook will transparently use those credentials to update the feed.
By Jesper Lind

Skapa en ExpressionBuilder för Application-variabler

Hade ett litet problem när jag ville få in en Application-variabel i SelectParameters till en SqlDataSource. Sessions-variabler går ju men ej Application. Se en tutorial för vilka typer av parametrar man kan skicka med som standard.

Googlade runt lite och hittade infomation om något som heter ExpressionBuilder i ramverket som jag aldrig använt tidigare. Med detta kan man skapa egna prefix och koppla det till klasser som tar ut den data man vill åt, och man kan binda värden i kontroller. Så min idé var att skapa en ExpressionBuilder som hämtade ut Application-variabler och det gick väldigt bra.

Här kommer jag gå igenom de steg jag gjorde, det hela handlade om att jag ville åt en egen parameter för vilken @Culture SqlDataSource skulle få som inparameter.

I Global.asx skapar jag parametern baserat på domännamnet. Är det en .se-domän vill jag ha "sv-SE" och för alla andra "en-GB".

protected void Application_BeginRequest(Object sender, EventArgs e)
{
        //Check if domain is swedish
       Application["CurrentCulture"] = HttpContext.Current.Request.Url.ToString().IndexOf("codeodyssey.se") != -1 ? "sv-SE" : "en-GB";
}

Min SqlDataSource ser ut ungefär så här:

<asp:SqlDataSource
    ID="sdsBlogPosts"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    SelectCommand="SELECT Title, Message FROM BlogPost WHERE Culture=@Culture"
    DataSourceMode="DataSet">
    <SelectParameters>
        <asp:Parameter Name="Culture" DefaultValue="<%$ AppVar:CurrentCulture%>" />
    </SelectParameters>
</asp:SqlDataSource>

För att få ExpressionBuilder att fungera så deklarerar man den i Web.config.

<compilation debug="false">
  <expressionBuilders>
    <add expressionPrefix="AppVar" type="AppVarExpressionBuilder, __code"/>
  </expressionBuilders>
</compilation>

Och sen själva klassen lägger man i App_Code.

using System.CodeDom;
using System.Web.Compilation;
using System.Web.UI;

/// <summary>
/// Summary description for AppVarExpressionBuilder
/// </summary>

public class AppVarExpressionBuilder : ExpressionBuilder
{
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
    {
        CodeTypeReferenceExpression targetClass = new CodeTypeReferenceExpression(typeof(AppVarExpressionBuilder));
        const string targetMethod = "GetIdentity";
        CodeExpression methodParameter = new CodePrimitiveExpression(entry.Expression.Trim());
        return new CodeMethodInvokeExpression(targetClass, targetMethod, methodParameter);
    }

    public static object GetIdentity(string param)
    {
        string returnString = string.Empty;
        if (System.Web.HttpContext.Current.Application[param]!=null)
        {
            returnString = System.Web.HttpContext.Current.Application[param].ToString();
        }
        return returnString;
    }
}

Hade stor hjälp av ett artikel av Peter Kellner för att lista ut hur ExpressionBuilders fungerar så tack för den.

By Jesper Lind

Håll reda på dina sajters Google PageRank med smidig tjänst

Har provat på PageRankAlert och måste säga att det är en smidig tjänst. Man kan lägga till url:er til sina webbsajter och få email när PageRank förändras.

Detta värde är alltså Google's rankningsvärde för att hålla reda på hur viktig en sajt anses vara. Nuförtiden är det ju tvivelaktigt hur mycket detta värde spelar in i sökmotorns algorithmer, men endå kul med statistik.

Tyvärr har Codeodyssey går ner en del det sista halvåret till en 3:a. Vi som åtminstonde låg på en 4: förra året.

By Jesper Lind

rssHugger - min recension

http://www.codeodyssey.se/upload/resource/blog/rssHugger-logo.png

Okej har inte så mycket att säga om sajten rssHugger ännu eftersom jag just registrerade min blogg.Det handlar om en tjänst som man kan promota sin blogg på, så mycket har jag förstått.

De har i alla fall en smart registreringsprocess måste jag säga. När man kommer till steget där man ska lägga till sin blogg så har man två alternativ. Antingen betalar man 20 dollars eller så skriver man en recension. Jag valde det senare alternativet...

By Jesper Lind