Vbscript 使用经典asp检查字符串是否全部大写

Vbscript 使用经典asp检查字符串是否全部大写,vbscript,asp-classic,Vbscript,Asp Classic,我需要一个函数来检查一个字符串是否全部(或大部分)大写使用经典asp。(我需要防止用户使用所有大写字母输入标题。) 例如,如果一个由30个字母组成的字符串包含20个或更多大写字母,我需要将其标记为“所有大写字母”。所以“基督山伯爵”可以,但“基督山伯爵”不行 我想从匹配[^a-Z]的字母数开始,但我该怎么做呢 这需要使用经典的ASP,而不是VB。只需使用UCase函数即可 <% dim a a = "This is a test 1" dim b b = "THIS IS A TES

我需要一个函数来检查一个字符串是否全部(或大部分)大写使用经典asp。(我需要防止用户使用所有大写字母输入标题。)

例如,如果一个由30个字母组成的字符串包含20个或更多大写字母,我需要将其标记为“所有大写字母”。所以“基督山伯爵”可以,但“基督山伯爵”不行

我想从匹配
[^a-Z]
的字母数开始,但我该怎么做呢


这需要使用经典的ASP,而不是VB。

只需使用UCase函数即可

<%

dim a 
a = "This is a test 1"
dim b 
b = "THIS IS A TEST 2"

If a = ucase(a) then response.write(a & " is all upper")
If b = ucase(b) then response.write(b & " is all upper")

%>

结果

这是一个测试2是所有的上限

与UCase(输入)进行比较使其成为全有或全无检查;我更喜欢看UCase比率:

Option Explicit

Function Ucasity(s)
  If Len(s) Then
     Dim r : Set r = New RegExp
     r.Global = True
     r.Pattern = "[A-Z]"
     Dim m : Set m = r.Execute(s)
     Ucasity = m.Count / Len(s)
  Else
     Ucasity = 0
  End If
End Function

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

Dim s
For Each s In Array( _
     "UPPERCASE but not ALL OR NOTHING" _
   , "UPPERCASE" _
   , "pipapo" _
   , "UPPERCASEuppercase" _
   , "" _
)
   WScript.Echo qq(s), CStr(s = UCase(s)), UCasity(s)
Next
输出:

cscript 39261181.vbs
“大写但不是全部或无”假065625
“大写”真1
“琵琶”假0
“大写大写”假0,5
”“真的吗

从匹配[^a-Z]的字母数开始,但如何操作?您要求检查所有字符是否都是大写,然后您要求检查30个字符中的20个是否都是大写。是哪一个?如果这是第一个,我下面的答案就可以了。@Dijkgraaf,听起来他们好像在要求数一数所有大写的单词。老实说,这个问题并不清楚,而且他们自己也没有表现出任何解决方案,个人只会走开并适当地标记。你知道VBscript和经典ASP之间的区别吗?提供最佳答案的人理解最初的问题,那么为什么你不能?第一眼看到你的例子总是会感到困惑…额外的
0
来自
065625
??然后我意识到这是语言环境,值实际上是
0.65625
。很容易被误认为是额外的参数。请注意,这是纯VBScript代码,而不是ASP。特别是,您需要将
WScript.Echo
替换为
Response.Write
,以便在ASP中运行此操作。@martha有效点。虽然如果人们在使用ASP时不了解Windows脚本主机及其差异,我还是会担心的。它们往往是齐头并进的。@Lankymart:完全可以使用ASP作为服务器平台。WSH在这种情况下没有一席之地。(好吧,除非你的服务器有非常糟糕的安全性。)@martha你没有抓住要点。无论是ASP、WSH还是其他语言,VBScript都是一种“托管”语言。这些小特质与“主人”有关。无论哪种方式,编码者都应该知道它们的存在。例如,
Response.Write()。