|
- <%
- '=======================================================================================================================
- ' FORMAT / PARSE HELPERS (generic, not tied to a table)
- '=======================================================================================================================
-
- ' VBScript has no IIf; this evaluates both branches, so only use it with plain values.
- Function Iif_(cond, whenTrue, whenFalse)
- If cond Then Iif_ = whenTrue Else Iif_ = whenFalse
- End Function
-
- ' True for a plain positive integer id (1-9 digits); use before trusting a route/form id.
- Function Valid_Id(s)
- Dim re : Set re = New RegExp
- re.Pattern = "^[0-9]{1,9}$"
- Valid_Id = re.Test(s & "")
- End Function
-
- ' Date -> "mm/dd/yyyy" for display ("" for null / invalid).
- Function Date_Fmt(d)
- If IsNull(d) Or IsEmpty(d) Then
- Date_Fmt = ""
- ElseIf IsDate(d) Then
- Date_Fmt = Right("0" & Month(d), 2) & "/" & Right("0" & Day(d), 2) & "/" & Year(d)
- Else
- Date_Fmt = ""
- End If
- End Function
-
- ' Date -> "yyyy-mm-dd" for HTML date inputs.
- Function Date_Iso(d)
- If IsNull(d) Or IsEmpty(d) Then
- Date_Iso = ""
- ElseIf IsDate(d) Then
- Date_Iso = Year(d) & "-" & Right("0" & Month(d), 2) & "-" & Right("0" & Day(d), 2)
- Else
- Date_Iso = ""
- End If
- End Function
-
- ' "yyyy-mm-dd" (HTML date input) -> Date, or Null when blank/invalid.
- Function Date_Parse(s)
- Dim re, m, y, mo, d
- Date_Parse = Null
- Set re = New RegExp
- re.Pattern = "^(\d{4})-(\d{2})-(\d{2})$"
- If Not re.Test(s & "") Then Exit Function
- Set m = re.Execute(s)(0)
- y = CInt(m.SubMatches(0)) : mo = CInt(m.SubMatches(1)) : d = CInt(m.SubMatches(2))
- If y < 2000 Or y > 2100 Or mo < 1 Or mo > 12 Or d < 1 Or d > 31 Then Exit Function
- If Month(DateSerial(y, mo, d)) <> mo Then Exit Function
- Date_Parse = DateSerial(y, mo, d)
- End Function
-
- ' HTML-encodes text and turns line breaks into <br>.
- Function Html_Nl2Br(s)
- Html_Nl2Br = Replace(Replace(Replace(Server.HTMLEncode(s & ""), vbCrLf, "<br>"), vbLf, "<br>"), vbCr, "<br>")
- End Function
-
- ' Quotes a value for CSV. Values that a spreadsheet would treat as a formula are prefixed with an apostrophe
- ' (CSV injection), except ordinary phone numbers like +1 (555) 123-4567.
- Function Csv_Cell(v)
- Dim s, first, re
- If IsNull(v) Or IsEmpty(v) Then
- Csv_Cell = ""
- Exit Function
- End If
- s = CStr(v)
- If Len(s) > 0 Then
- first = Left(s, 1)
- If first = "=" Or first = "@" Or first = vbTab Or first = vbCr Then
- s = "'" & s
- ElseIf first = "+" Or first = "-" Then
- Set re = New RegExp
- re.Pattern = "^[+\-][0-9 ().\-]*$"
- If Not re.Test(s) Then s = "'" & s
- End If
- End If
- If InStr(s, ",") > 0 Or InStr(s, """") > 0 Or InStr(s, vbCr) > 0 Or InStr(s, vbLf) > 0 Or Left(s, 1) = " " Or Right(s, 1) = " " Then
- s = """" & Replace(s, """", """""") & """"
- End If
- Csv_Cell = s
- End Function
- %>
|