Asp classic ASP If语句If Split()在下标超出范围时为空:';[编号:1]';

Asp classic ASP If语句If Split()在下标超出范围时为空:';[编号:1]';,asp-classic,outofrangeexception,Asp Classic,Outofrangeexception,我有一个表单字段,在用户注册时要求输入“全名”。然后我想把这个字符串分成名字和姓氏。我可以使用以下代码来实现这一点: <% If Request.Form("user[username]") <> "" Then NameStr = Request.Form("user[username]") Dim WordArray WordArray = Split(NameStr, " ") End If %> 然后,我可以使用以下方法将变量拆

我有一个表单字段,在用户注册时要求输入“全名”。然后我想把这个字符串分成名字和姓氏。我可以使用以下代码来实现这一点:

<%
If Request.Form("user[username]") <> "" Then
     NameStr = Request.Form("user[username]")
     Dim WordArray
     WordArray = Split(NameStr, " ")
End If
%>

然后,我可以使用以下方法将变量拆分为我的形式:

value="<%=WordArray(0)%>"
value="<%=WordArray(1)%>"
value=“”
value=“”
然而,如果用户只是把他们的名字放进我会得到一个错误,因为拆分是在单词之间寻找一个空格来正确执行操作。我试过:

<%
If Request.Form("user[username]") <> "" Then
    NameStr = Request.Form("user[username]")
    Dim WordArray
            If NameStr = "" Then
                    WordArray = Split(NameStr, "")
            Else
                    WordArray = Split(NameStr, " ")
            End If
End If
%>

现在我知道这会失败,因为它永远不会是空的,但是如果只有一个名字而没有姓氏,有没有办法看看拆分是否会出错?我已经查看了表单字段的验证,但看不到确保表单字段之间有空格的方法


有什么想法吗?

这不是一个真正的解决方案,但我掌握了一些“老派”的VBA技术,它至少捕获了错误:

<%
If Request.Form("user[username]") <> "" Then
    NameStr = Request.Form("user[username]")
    Dim WordArray
        WordArray = Split(NameStr, " ")
        On Error Resume Next
End If
%>


“错误恢复下一步”只会忽略错误并继续。脏(就像ASP一样,但它可以工作!)。

拆分并不是问题所在。如果字符串中没有空格,
Split
不会抛出错误,而是返回一个只有一个元素的数组。您应该使用
UBound
功能检查
WordArray
的上限:

Dim WordArray, firstName, lastName
WordArray = Split(NameStr, " ")

firstName = WordArray(0)
If UBound(WordArray) >= 1 Then
    lastName = WordArray(1)
Else
    lastName = ""
End If

完美的谢谢我昨天按照我自己的答案设法让它工作,但我认为你的解决方案更好。