Just nu i M3-nätverket
Gå till innehåll
KIVA_62

Regular Expression i .NET Web Pages

Rekommendera Poster

Någon här som är duktig på Reguljära utryck? Jag använder mig av .NET web pages färdiga funktion för validering och skulle behöva kontrollera med "Regex" om en adress från ett formulär är en Boxadress, D.v.s. de tre första bokstäverna bildar ordet "Box" ( ej Case Sensitive ) och det fjärde tecknet (när man rensat ev. mellanslag) är en siffra.

 

Jag är rätt ny på detta, så jag skulle även vara tacksam för en bra svensk tutorial för Regujära utryck?

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Detta verkar fungera.

Regex.IsMatch("Box 2", @"^box.\d{1,5}", RegexOptions.IgnoreCase)

Jag är inte helt hundra på hur web pages färdiga uttryck för validering fungerar. Så du får kanske klippa och klistra lite. Du ser åtminstone hur mönsteret  ser ut.

Känner inte till någon svensk tutorial för regex. Jag brukar använda detta cheat sheet då det följer .NETs regex motor.
http://regexlib.com/CheatSheet.aspx

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack för det, testade med nedan, och resultatet blev att allt tolkades som Box adress förutom just om man skriver "Box [siffra]" *Haha*

Så på något sätt så måste jag få en omvänd koll, som ...  if(adress != boxadress). Sen vet jag inte hur man löser Case Sensitive i detta fall.

 

Validation.Add("foretagAdress",

       Validator.Regex(@"^box.\d{1,5}", "- Du kan inte ange en Boxadress"),

       Validator.StringLength(80, 4, "- Ej giltig  adress")

);

 

Jag har hittat en färdig RegEx för validering av epost som ser ut så här

 

Validation.Add("epost",

Validator.Regex(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$",

"- Ej giltig e-postadress"),

Validator.Required("- E-post adress saknas")

);

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Dessa returnerar true för mig. Vilket jag väljer att tolka som att den hittat texten med hjälp av uttrycket. Men det uttrycket gör är att kolla om texten börjar med box, oavsett små eller stora bokstäver som följs av 1 eller flera tecken och sen siffra på slutet. Genom att sätta ett $-tecken efter \d så säger du till uttrycket att strängen måste ta slut där. Det kanske kan göra regeln lite striktare.

Regex.IsMatch("Box 2553", @"^[boxBOX].+\d")
Regex.IsMatch("box 23", @"^[boxBOX].+\d")
Regex.IsMatch("boX 5", @"^[boxBOX].+\d")
Regex.IsMatch("BOX: 1", @"^[boxBOX].+\d")

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja det funkar, upptäckte dock att även "BIL 123" returnerar True. Verkar som det räcker med att sätta första bokstaven till "B"

 

Regex.IsMatch("BIL 123", @"^[boxBOX].+\d")

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Haha .. jag är hemska tacksam för ditt tålamod och det börjar likna något nu. Du kan säkert ta patent på detta, måste ju finnas ett stort behov då alla webbshoppar som riktar sig till företag inte kan leverera varor till en boxadress.

 

En liten hake bara ... testade med Boxgatan 2, (som ju är en okey leveransadress)  och den blir "True".

Vet inte hur många gator det finns som börjar på Box i Sverige, antar det är liten chans ... försöker även själv lägga in att efter bokstäverna i BOX kollar om det är ett mellanslag eller en siffra, är osäker ändå om det blir vattentätt, då man kan ge sig tusan på att någon kund skriver "Box gatan 2" vilket då borde generera "True"

 

Tack för hjälpen i alla fall!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Mönstret fungerar ju så att först tittar man på om strängen börjar med 3 bokstäver av kombinationen av bokstäverna b, o och x både versalt och gement. Sen vadsomhelst och sen siffra.

 

On du provar detta så kollar man specifikt efter whitespace efter bokstäverna och innan siffran.@"^(B|b|O|o|X|x){3}\s\d"

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Kanon !!! Funkar perfekt!

Tack för hjälpen!

 

Damerna på kundtjänst blir glada nu :-)

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



  • Liknande Innehåll

    • Av Axi
      Hej.
      Jag är lite nördig så jag brukar spara ut mina kontohändelser från min bank i Excel för att hålla koll på ekonomin. Det funkar skitbra idag, men nu är Swedbank på väg att introducera "Nya internetbanken" och det ställer till det lite för mig och min ekonomikoll. Jag kan nämligen inte kopiera ut datan på samma sätt som tidigare, eftersom den numera är omformaterad.
      Visserligen har Nya internetbanken infört samma typ av redovisning som jag har i mitt excelblad, men jag har data från 2008, medans de bara sparar i 18 månader.
       
      Min plan är att kopiera hela deras sida, köra ett makro i Excel och på så vis få ut datan i rätt celler i mitt blad. Jag har kommit en bit, men jag har fastnat när jag nu vill styra upp datan baserat på innehållet.
      Målet är att få ut detta i en array (x,3):
       
      NAMN   DATUM   VÄRDE   TILLGÄNGLIGT
       
       
      Om vi börjar med att titta vad jag får från websidan (anonymiserad data):
       
      Så, här kan vi snabbt se att: skräpdata undantaget, så bör datan formateras ned i 4 kolumner. Varje rad med data i texten ovan börjar med fyra blanksteg och avslutas med [CR][LF]. Alltså inte mycket att hämta där. Jag behöver dock någon fast punkt i datan för att förklara för koden var jag är och efter lite funderande bestämde jag mig för att utgå från datumstämpeln. Det är det enda som är konstant. Jag kan även städa bort oönskad data med hjälp av positionen av datumstämpeln.
       
       
      Tanken är alltså att köra ISDATE för att reda ut vilken bit som är datum och vilken som inte är det, när jag vet det tänkte jag placera ett tecken till där (dvs fältet med datum +2 så att den hamnar precis efter det värde som motsvarar tillgängligt) Jag har använt ¤ för detta i koden.
      Jag börjar med att städa bort newline tecknen eftersom jag fått för mig att detta är lättare att göra på en string än i en array.
      Sedan ersätter jag de fyra blankstegen med ett ! för att kunna använda som kolumnseperator.
       
      När jag väl fått in ¤ tecknet tänkte jag köra en split på det tecknet för rader, och därefter en ny split på ! för att få ut kolumner och sen tror jag att saken är biff.
       
       
      Tyvärr då är jag inte så bra på varken arrays eller string hantering, så så här långt kom jag. Jag har fastnat lite här eftersom den array jag skapar endast innehåller 1 fält. Jag funderar på att använda regex istället, kan man köra en split på regex månne? Problemet då blir att splitten hamnar fel.
       
      Namnet är ju det jag vill ha först i varje rad, men jag måste ändå använda datumen för att städa bort skräpdatan..
      Sub Konto() Dim strArray() As String Dim intCount As Integer Dim objData As New MSForms.DataObject Dim strText objData.GetFromClipboard strText = Replace(objData.GetText(), vbNewLine, "") strText = Replace(strText, " ", "!") MsgBox strText strArray = Split(strText, ¤) For intCount = LBound(strArray) To UBound(strArray) If IsDate(strArray(intCount)) = True Then strArray(intCount) = strArray(intCount) & "¤" End If Next End Sub Detta är vad jag får ut i immediate med koden ovan:
       
       
    • Av i3o6
      Jag experimenterar lite med trådning och det går ju bra tänkte jag, ända tills jag testade mitt program på en annan dator.
      Istället för att konsumera 16MB RAM så rusar det iväg till 3GB och kraschar.
      Vad kan det var för knas? Någon "minor" versionsskillnad på .Net? inställningar i Visual Studio? eller skillnader i win7/win8.1?
       
      Sen så kan det ju vara bra att veta hur man kan undvika problemet genom att inte skriva dålig kod.
       
      Borde inte garbage collectorn hantera de här arrayerna eller måste man döda dom på nåt bra sätt?:
      byte [] hash1 = new byte[16]; byte [] hash2 = Hex2ByteArray("541c57960bb997942655d14e3b9607f9"); while(true){ hash1 = MD5(Permutation.Next()); if(hash1.SequenceEqual(hash2)) return Permutation.Value; } Man kanske ska göra såhär istället?:
      MD5(Permutation.Next()).CopyTo(hash1, 0); Men känns som om man förlorar massa prestanda om man ska kopiera.
      Har inte tillgång till den felande datorn nu så det är lite jobbigt att felsöka
       
       
      Edit:
      Om jag sätter ett fast värde på hash1 så händer inget farligt. Min permutationssak är ok och trådningen är ok antar jag då? Och felet borde vara här!?!?
       
      Får samma problem med CopyTo. Måste man implementera nån dispose-sak?
    • Av esplingo
      Hej,

      Jag heter Sebastian och driver, vid sidan av min anställning, ett konsultbolag som erbjuder tjänster inom Systemutveckling/Webbutveckling och Konsultation inom andra IT relaterade frågor.

      Jag har erfarenhet av utveckling inom finans och e-handel och har arbetat med många spännande projekt inom området.

      Behöver du en driven och kompetent resurs till ditt projekt/bolag?
      Har du en idé som du vill bolla eller vill du bara utöka ditt kontaktnätverk?

      Tveka inte om att höra av dig i så fall!

      Mvh,
      Sebastian
    • Av tacksam
      Såg på nätet att flera hade problem att installera .NET Framework 3.5 som vissa program skall ha för att fungera. Jag har försökt nu i ett par dagar utan att lyckas få in det. Någon på nätet menar att det är Windows8.1 som är problemet och dom fick installera om datorn till Windows8 så fungerade det. Jag vill helst inte behöva installera om för jag har lagt flera dagar på att installera min dator. Det måste väl finnas ett sätt att installera .NET även på Windows8.1???
      Jag har testat flera saker utan framgång och hittade en fil som jag bifogar, min engelska är inte så bra så jag kan ha missa något, nästan all hjälp står på engelska.
      Är det någon som har en lösning och som vill hjälpa mig så vore det bra, TACK.
    • Av FiEnD
      Hej!
       
      Har ett litet problem som jag har kämpat med nu i flera månader, men inte verkar få till.
      Jag har byggt ett projekt i .NET och skapat en com-komponent som jag kan använda mig utav i den klassiska ASPn.
      Denna komponent bygger på iTextSharp.
      När jag utvecklar denna så funkar den superbra lokalt. Inte det minsta problem att ladda den via klassiska ASPn i den klass som jag lagt den i.
      Däremot, när jag kopierar över projektets DLLer och uppdaterar på den skarpa servern så får jag felmeddelandet "error '80070002'" för denna sida på raden där CreateObject är.
      Någon som har en teori?
       
      Det jag har testat hittills är:
      - regasm /tlb och /codebase
      - flyttat den kod som körs till en annan klass (blir samma fel).
      - kikat i registret för att se skillnader, vilket det fanns, men jag ändrade så att registret såg likadant ut lokalt såväl som på servern
      - Thrust Levels är samma på servern som lokalt.
      - Samma inställningar i applikationspoolerna
       
      Alla DLLerna ligger precis där de ska precis som de ska göra lokalt.
      Övrigt så funkar projektet fel och andra klasser kan jag skapa objekt till, men inte denna PDF-klass där jag använder mig utav iTextSharp
      Så som jag förstått det så är error '80070002' ett fel som genereras för att någon fil inte kan hittas(?).
       
      Hoppas att jag postade denna i rätt forum nu då jag blev osäker om det är klassisk ASP eller .NET som den ska ligga under.
       
      Stort tack på förhand om någon har nån teori?
       
      Mvh Fredrik
  • Senaste som Tittar

    Inga registrerade medlemmar är inne på denna sida.

  • Obesvarade ämnen

  • Nya ämnen

×
×
  • Skapa nytt...