如果一个字母返回true的Javascript函数?
Posted
技术标签:
【中文标题】如果一个字母返回true的Javascript函数?【英文标题】:Javascript Function that returns true if a letter? 【发布时间】:2017-02-28 11:24:34 【问题描述】:所以我正在为我的类编写一个名为isAlpha
的函数,它接受一个字符(最好是长度为1 的字符串),如果是字母则返回true,否则返回false。
问题是我完全不知道该去哪里。这是老师在课堂上给出的例子:
var isAlpha = function(ch)
//if ch is greater than or equal to "a" AND
// ch is less than or equal to "z" then it is alphabetic
var ltr ="a", digit =7;
alert(isAlpha(ltr));
alert(isAlpha(digit))
虽然我不知道该怎么做,但我尝试了一些不同的方法,例如:
var isAlpha = function(ch)
if (ch >= "A" && ch <= "z")
return true
alert(isAlpha(ch))
谁能指出我如何启动此功能的正确方向?
【问题讨论】:
你的问题是什么?您只需严格按照说明操作即可。 用匹配函数试试正则表达式。 @但您无法按照讲师提供给您的指示...“如果 ch 大于或等于“a””在任何编程语言中都不会被翻译成if (ch >= "A"
... 显然那么你需要完整的代码。
好吧,我没有把它放在问题中,但我的指示说它必须接受大写和小写。据我了解,“A”的价值低于“a”。但是你没有理由这么粗鲁。
【参考方案1】:
您可以只使用不区分大小写的regular expression:
var isAlpha = function(ch)
return /^[A-Z]$/i.test(ch);
如果您应该遵循 cmets 中关于大于和小于比较的说明,并且您想检查输入是否为长度为 1 的字符串,那么:
var isAlpha = function(ch)
return typeof ch === "string" && ch.length === 1
&& (ch >= "a" && ch <= "z" || ch >= "A" && ch <= "Z");
console.log(isAlpha("A")); // true
console.log(isAlpha("a")); // true
console.log(isAlpha("[")); // false
console.log(isAlpha("1")); // false
console.log(isAlpha("ABC")); // false because it is more than one character
你会注意到我没有使用if
语句。这是因为表达式 ch >= "a" && ch <= "z" || ch >= "A" && ch <= "Z"
的计算结果为 true
或 false
,因此您可以直接 return
直接使用该值。
您尝试使用if (ch >= "A" && ch <= "z")
的方法不起作用,因为大写“A”和小写“z”之间的字符范围不仅包括字母,还包括“Z”和“a”之间的一些其他字符”。
【讨论】:
我们还没有了解正则表达式。所以我不确定我是否应该使用它们。当然,除非没有其他东西可以使用。也许我只是错过了那节课。但我已经想通了。 var input = prompt("输入一个字符") var isAlpha = function(ch) if (ch >= "A" && ch 它只允许多个字符,所以我试图解决这个问题。 @johntc121 - 您不需要 正则表达式来执行此操作,这只是最简单的方法。因此,对于您的任务,您可能应该坚持比较。请注意我在回答中所说的为什么(ch >= "A" && ch <= "z")
不起作用。例如,字符 "["
大于大写 Z 但小于小写 a。
那么我是否必须将其更改为类似 (ch >= "A" && ch = "a" && ch
【参考方案2】:
首先确保它是一个字符串,然后使用正则表达式。
var isAlpha = function(ch)
return typeof ch === "string" && ch.length === 1 && /[A-Za-z]/.test(ch);
【讨论】:
如果您在正则表达式中包含^
和 $
,则不需要单独的类型和长度检查(至少,我不知道任何可能的非字符串值强制转换为单个字符,即字母)。
为什么无效数据返回false?为什么不抛出TypeError
?
@Sapphire_Brick 在 SO 上的简短 sn-ps 很少包含任何适当的错误处理,而是专注于显示解决问题的路径的开始。答案的任务是帮助解决问题,而不是提供完整的生产级代码。除此之外,这个问题(我不得不再次阅读,这已经超过三年了......)要求“如果它是一封信,则返回真,如果不是,则返回假”。从这个意义上说,“无效数据”是“不是字母”。从问题提供的代码中,还建议调用像isAlpha(digit)
这样的调用,其中digit
不是字符串。【参考方案3】:
如果你只需要一个字符:
var isAlpha = function(ch)
return /^[A-Za-z]1,1$/.test(ch)
注意这里的1,1
表示角色至少出现一次,最多出现一次。如果你只测试一个字符,你可以把这个1,1
去掉,如果你想测试多个字符,你可以根据你的要求更新成n,m
。
【讨论】:
1,1
是多余的。【参考方案4】:
regex 是你的朋友。
var isAlpha = function(ch)
return ch.match(/[0-9]/) != null
【讨论】:
您应该改用RegExp.prototype.test
,String.prototype.match
在这里效率较低,因为解释器必须生成匹配对象。此外,您的正则表达式只匹配数字。以上是关于如果一个字母返回true的Javascript函数?的主要内容,如果未能解决你的问题,请参考以下文章