Avatar billede hugopedersen Nybegynder
25. februar 2009 - 09:37 Der er 5 kommentarer og
1 løsning

RegularExpression

Jeg sidder og roder lidt med regular expressions i Access - det virker sådan set meget godt, men jeg kan ikke gennemskue hvordan jeg laver en expression der tager højde for:
et tal skal være på 12 cifre, de første 4 cifre skal være 0044, 0045 eller 0047

Nogen der har erfaring med dette?
Avatar billede mugs Novice
25. februar 2009 - 10:04 #1
Private Sub felt1_BeforeUpdate(Cancel As Integer)
Select Case Left(felt1, 4)
Case Is <> "0044"
MsgBox Left(felt1, 4) & " er forkert start på data"
Case Is <> "0045"
MsgBox Left(felt1, 4) & " er forkert start på data"
Case Is <> "0047"
MsgBox Left(felt1, 4) & " er forkert start på data"
End Select
End Sub
Avatar billede hugopedersen Nybegynder
25. februar 2009 - 10:17 #2
Det var så ikke så svært alligevel:

Pattern skal være  \b[0][0][4][4-7][0-9]{8}\b

Det eneste er at den også godtager 0046, men det kan jeg leve med.

mugs> personligt synes jeg det er lidt 'smartere' at have en generel rutine til check af indtastninger der bare returnerer true eller false for om den er OK - man skal kune lige finde den rigtige pattern.
Avatar billede hugopedersen Nybegynder
25. februar 2009 - 10:21 #3
Hov det var det forkerte pattern - det rigtige er \b[0][0][4][4|5|7][0-9]{8}\b

(og så dropper den 0046)
Avatar billede hugopedersen Nybegynder
25. februar 2009 - 10:29 #4
For dem der evt. ikke er bekendt med fordelene ved at bruge RegEx kan jeg henvise til

http://www.regular-expressions.info/examples.html
http://www.fileformat.info/tool/regex.htm
http://www.regexbuddy.com/
Avatar billede hugopedersen Nybegynder
25. februar 2009 - 10:46 #5
Følgende funktion søger i en streng efter det angivne mønster og returnerer det fundne eller en tom streng.

Public Function fhpRegular_Expression_Find(strString_Search As String, strPattern As String) As String
' -----------------------------------------------------------------------------------
' Purpose    : Check a string for a regular expression
' Parameters :
' Returns    : String
' Created    : 07-08-2008
' Modified  :
' Remarks    : Set reference to 'Microsoft VBScript Regular Expression 5.5'
' -----------------------------------------------------------------------------------
On Error GoTo Error_fhpRegular_Expression_Find
  Dim rxRegExp As RegExp
  Dim rxMatches As MatchCollection
  Dim rxMatch As Match
  Dim strResult As String
 
  Set rxRegExp = New RegExp
 
  rxRegExp.IgnoreCase = True                                    'Upper and lower is OK
  rxRegExp.Global = False                                      'True = all matches  False = first match only
  rxRegExp.Pattern = strPattern
 
  Set rxMatches = rxRegExp.Execute(strString_Search)
 
  For Each rxMatch In rxMatches
    strResult = (rxMatch.Value)
  Next
 
  Set rxRegExp = Nothing
 
Exit_fhpRegular_Expression_Find:
  fhpRegular_Expression_Find = strResult
  Exit Function

Error_fhpRegular_Expression_Find:
  strResult = ""
  Select Case Err.Number
    Case 3021
    Case 2501
    Case Is < 0
    Case Else
      MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpRegular_Expression_Find'"
  End Select
  Resume Exit_fhpRegular_Expression_Find

End Function
Avatar billede hugopedersen Nybegynder
25. februar 2009 - 14:02 #6
Må hellere lukke igen da jeg fandt svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester