gpt4 book ai didi

javascript - 测试固定电话号码模式的最快方法

转载 作者:数据小太阳 更新时间:2023-10-29 05:48:21 24 4
gpt4 key购买 nike

因此,挑战在于我们试图检测字符串是否与固定电话号码模式匹配,这是一个简单的字符串模式。

模式是:

ddd-ddd-dddd

其中“d”代表十进制数,减号代表它自己,“-”

目前用于测试的模式是,但如果觉得没有足够的模式来揭穿不正确的格式,可以增加。

"012-345-6789"
"0124-345-6789"
"012-3456-6789"
"012-345-67890"
"01a-345-6789"
"012-34B-6789"
"012-345-678C"
"012"

目标,即我寻求的答案,是找到执行最快的方法以返回 boolean,其中 true 表示模式良好false 表示模式错误。

这是我目前的解决方案

function matchesPattern(pattern) {
if (pattern.length !== 12) {
return false;
}

var i = 0,
code;

while (i < 12) {
code = pattern.charCodeAt(i);

if (i > 8 || i % 4 !== 3) {
if (code < 48 || code > 57) {
return false;
}
} else if (code !== 45) {
return false;
}

i += 1;
}

return true;
}

它与测试模式一起在 jsfiddle 上可用

我创建了一个 jsperf,我将在其中添加更多建议的方法,以便比较这些方法的执行速度以确定哪个方法最快

您的方法可以是将在浏览器中执行的任何有效的 javascript 代码,如果您愿意,您可以使用 ECMA5 并针对现代浏览器,或者使用跨浏览器标准,如果不是,则答案不会被视为不正确例如在 IE6 上运行。您还可以使用任何您希望的第三方库,即 jquery、lodash、underscore 等。最后的要求是代码不能在 Chrome v25 或 Firefox v20 上执行失败

我有任何不清楚的地方,请随时发表评论,我会更新我的问题以进行澄清。

仅微优化不同的答案才算数

如果答案有效并且已添加到性能图表中,请不要更改您的答案。您可以提交超过 1 个答案。

更新:好的,一周过去了,现在是时候宣布我将选择的答案了。

从这个练习中学到了什么?

与手工构建的 javascript 例程相比,正则表达式似乎相对较慢,但对于大多数任务来说足够快。 (至少对于小字符串模式)

没有使用任何第 3 方库、jquery、undescore 等的解决方案,什么都没有。不足为奇,但我认为有人可能已经尝试过。

展开的循环似乎仍然是王道。许多人说现在没有必要,因为浏览器是如此先进,但这个测试仍然表明它们是浏览器中的佼佼者。

我要感谢所有参与这个问题的人,尤其是那些实际提交代码进行测试的人。

最佳答案

比以前更快:

function tecjam5(pattern) {
var c;
return !(pattern.length != 12 ||
!(((c=pattern.charCodeAt(2))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(4))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(11))>>1) == 28 || (c>>3) == 6) ||
!(((c=pattern.charCodeAt(0))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(1))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(5))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(6))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(8))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(9))>>3) == 6 || (c>>1) == 28) ||
!(((c=pattern.charCodeAt(10))>>1) == 28 || (c>>3) == 6) ||
pattern.charAt(3) != '-' || pattern.charAt(7) != '-');
}

(简而言之:每个<8的数字只需要比较一次)

关于javascript - 测试固定电话号码模式的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16338714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com