17

What is the quickest and easiest way (in Classic ASP) to check if a string has some string (that has a length greater than 0) i.e. NOT "Null", "Nothing", "Empty", or '' empty string

5
  • Is there a String class in classic ASP? Commented Sep 29, 2014 at 19:23
  • 3
    @LajosArpad Classic ASP is not a language it is a technology that can handle server-side VBScript or Javascript code. Therefore, VBScript does not have a string class (like .net/C#), but does have functionality to manipulate strings and variables. Commented Sep 29, 2014 at 20:31
  • 1
    If you have a string variable, as I understand your question, just test it with Len(s) > 0. If you need to verify your variable's type to ensure it's a string, look to the (more complicated) answers below. Commented Sep 29, 2014 at 21:11
  • 4
    If you're always expecting a string just use Len(s & "") > 0 avoids having to check for null values, similar to what @Bond is suggesting but with an implicit cast on the s variable. Commented Sep 30, 2014 at 8:59
  • Checking s <> "" is sufficient. It is also null proof since null <> "" is null which can be used inside if and the branch will not execute. It also works for types other than string... they are cast to string for comparison which is the safest cast and won't give you "type mismatch" errors. Commented Jul 11, 2018 at 8:56

7 Answers 7

8

To make sure that the Variant you deal with is of sub-type "string", you need the VarType or TypeName function. To rule out zero length strings, you need Len(). To guard against strings of space, you could throw in a Trim().

Code to illustrate/experiment with:

Option Explicit

Function qq(s) : qq = """" & s & """" : End Function

Function toLiteral(x)
  Select Case VarType(x)
    Case vbEmpty
      toLiteral = "<Empty>"
    Case vbNull
      toLiteral = "<Null>"
    Case vbObject
      toLiteral = "<" & TypeName(x) & " object>"
    Case vbString
      toLiteral = qq(x)
    Case Else
      toLiteral = CStr(x)
  End Select
End Function

Function isGoodStr(x)
  isGoodStr = False
  If vbString = VarType(x) Then
     If 0 < Len(x) Then
        isGoodStr = True
     End If
  End If
End Function

Dim x
For Each x In Array("ok", "", " ", 1, 1.1, True, Null, Empty, New RegExp)
    WScript.Echo toLiteral(x), CStr(isGoodStr(x))
Next

output:

cscript 26107006.vbs
"ok" True
"" False
" " True
1 False
1.1 False
True False
<Null> False
<Empty> False
<IRegExp2 object> False
Sign up to request clarification or add additional context in comments.

Comments

7

Here's a one-liner that dodges all the trouble with Null by concatenating the value with an empty string. It works for Null, Empty, "", and, of course, strings with actual length! The only one it doesn't (nor shouldn't) work for is Nothing, because that's for object variables, of which a string is not.

isNullOrEmpty = (Len("" & myString) = 0)

Comments

4

You could try having something like this:

Function nz(valToCheck, valIfNull)
 If IsNull(valToCheck) then
    nz = valIfNull
 Else
    nz = valToCheck
 End if
End function

and then you would use it like this:

if nz(var,"") <> "" then
  '--string has something in it
else
  '--string is null or empty
end is

1 Comment

It would be great if you can show a complete script rather than saying --string has something in it. That will help more users.
3

You can use the VarType() function to check if it is a string, then you can check if the string is not empty. This statement will only pass through a string that isn't empty.

If VarType(MyString) = 8 Then
  If MyString <> "" Then 
    'String is Not Null And Not Empty, code goes here

  End If
End If

8 Comments

Please test your code before you post. VarType of "" and Trim(" ") is 8 (string). So your idea to check VarType(MyString) > 1 is flawed.
@Ekkehard.Horner You're right thanks, i didn't notice that. Anyways, I fixed it.
Now numbers, booleans, and everything that Len() stringyfies will pass as 'good' strings.
You shouldn't use And, but a nested If because VBScript evaluates both sub-expressions. For non-strings Len(MyString) is unnecessary/inefficient, for objects even fatal.
@Lankymart What can I say? The struggles of learning new technology risks forgetting the old.
|
1

This worked for me:

if mystring  = "" then wscript.echo "Empty string"
else wscript.echo "String is not empty"

Comments

1

I use this function in all my projects :

'Returns True if [Empty] or [NULL] or [Empty String] or [Empty Object]
Function IsBlank(Value)
    If IsEmpty(Value) or IsNull(Value) Then
        IsBlank = True
    ElseIf VarType(Value) = vbString Then
        If Value = "" Then
            IsBlank = True
        Else
            IsBlank = False
        End If
    ElseIf IsObject(Value) Then
        If Value Is Nothing Then
            IsBlank = True
        Else
            IsBlank = False
        End If
    Else
        IsBlank = False
    End If
End Function 'IsBlank

Comments

0
<%
Dim x,y
x = "abcdefg"

'counting length of string
y = Len(x) 
Response.Write (y)


'checking string is empty or not
If Len(x) = 0 then 
Response.Write ("<p>String is empty</p>")
Else
Response.Write ("<p>String is not empty</p>")
End If
%>

Hope this is helpful.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.