views:

980

answers:

6

Does VbScript have a native implementation for Regex? I need to validate e-mail addresses on an old ASP application.

Any pointers would be great.

+1  A: 

Yes you can

try this

Eric
+5  A: 

This example is by AlexCuse from LessThanDot

Function ValidEmail(ByVal emailAddress) 

'this function will use regular expressions to check an '
'email address for validity '

'instantiate regex object container, output boolean '
Dim objRegEx, retVal 

'using late binding, vbscript reference is not required '
Set objRegEx = CreateObject("VBScript.RegExp") 

'.pattern -looks for a valid email address '
With objRegEx 
      .Pattern = "^\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$" 
      .IgnoreCase = True 
End With 

retVal = objRegEx.Test(emailAddress) 

'get rid of RegEx object '
Set objRegEx = Nothing 

ValidEmail = retVal 

End Function
Remou
Thats a crummy match pattern, but easily fixed.
FlySwat
haha I haven't used that code in quite a while. But would you mind sharing how you'd fix the match pattern? I don't use regular expressions too often but always looking for tips.
AlexCuse
This accepts the illegal "[email protected]" but not the legal "[email protected]", and no IDN. Try to send to "mailtest@例え.テスト" (or converted to punny-code: "[email protected]")
some
Since the question is tagged VBScript I'm surprised how many upvoted a VB6 implementation.
AnthonyWJones
-1 for not posting VBScript sample
Dscoduc
+1  A: 

Yes, it sure does. Here's Microsoft's documention.

Tmdean
A: 

Like other said, yes. I just wanted to put you at the devguru vbscript docs, I find they tend to be the good place to get quick vbscript answers. This is there section on the Regexp object.

Zoredache
A: 

VBScript has a built-in RegExp object, which is Microsoft's implementation of JavaScript regular expressions. I have an article about the VBScript RegExp object on my website that explains how to use it.

Jan Goyvaerts
+5  A: 

Since the top answer here is in VB6 I thought I'd add one here in VBScript (since that's what the question is asking for):-

Option Explicit

Function GetEmailValidator()

  Set GetEmailValidator = New RegExp

  GetEmailValidator.Pattern = "^((?:[A-Z0-9_%+-]+\.?)+)@((?:[A-Z0-9-]+\.)+[A-Z]{2,4})$"

  GetEmailValidator.IgnoreCase = True

End Function

Dim EmailValidator : Set EmailValidator = GetEmailValidator()

Now some tests:-

Response.Write EmailValidator.Test("") = False
Response.Write EmailValidator.Test(" ") = False
Response.Write EmailValidator.Test("[email protected]") = True
Response.Write EmailValidator.Test("[email protected]") = True
Response.Write EmailValidator.Test("[email protected]") = True
Response.Write EmailValidator.Test("[email protected]") = False
Response.Write EmailValidator.Test("@oops.co.uk") = False
Response.Write EmailValidator.Test("name") = False
Response.Write EmailValidator.Test("name@uk") = False
Response.Write EmailValidator.Test("name@uk") = False
Response.Write EmailValidator.Test("[email protected]") = False
AnthonyWJones
+1 - VBScript, clean, concise, and correct...
Dscoduc