- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
因此,挑战在于我们试图检测字符串是否与固定电话号码模式匹配,这是一个简单的字符串模式。
模式是:
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/
以下是场景:我有一个可通过移动浏览器访问的网络应用程序。每当用户单击通过网络浏览器访问的应用程序页面中的链接时,我需要检测移动设备 IMEI 和 sim IMSI。这是为了跟踪具有相同 SIM 卡的同
场景如下:我有一个可通过移动浏览器访问的 Web 应用程序。每当用户单击可通过网络浏览器访问的我的应用程序页面中的链接时,我都需要检测移动设备的 IMEI 和 sim IMSI。这是为了跟踪具有相同
我需要在 Phonegap 为 Android 构建 HTML 移动 Web 应用程序中获取 IMEI 号码、手机号码、SIM 号码 最佳答案 你不能直接得到它们。 选项 1) 寻找一些插件,我不确定
我有一个输入框。它可能包含名称或数字。 如果输入至少有一个字母,我们将其作为名称处理,并且其长度应为 11 或更短。因此有效输入可能是 Bob、12Bob 或 Bob23。不允许有空格或其他字符,因此
我有这个要求:从客户表中 - 返回电话号码的前缀。我尝试使用字符串,将全名拆分为名字/姓氏,但它仅适用于数字。完整的nb格式为(258)1231456 最佳答案 SELECT '(258) 12314
我正在开发一个应用程序,用户必须使用手机键盘调用电话并输入验证号码。 我希望能够检测他们输入的数字是否正确。电话系统无法访问有效号码列表,但它会根据算法(如信用卡号码)验证号码。 以下是一些要求: 一
我有一张城市交通卡。我需要知道卡的援助(应用程序标识符)号码是多少。根据 EMV Book 1,我必须使用 List of AIDs 方法(第 141 页)。但是如何呢? 我还有一个 ACR122U
我想使用 javascript 分解数组中的 VIN,可能使用正则表达式,然后使用某种循环... 以下是读取 VIN 的方法: http://forum.cardekho.com/topic/600-
Here我找到了一个非常有用的答案,展示了如何使用 Whatsapp 从网站发送预填充的消息。 我们可以对 Telegram 做同样的事情吗? 最佳答案 您可以尝试使用以下方式打开 Telegram
我需要帮助完成这段代码,以便应用程序在收到推送通知时显示角标(Badge)编号,我可以收到推送通知,但应用程序上没有角标(Badge),这是代码 func application(_ applica
我正在使用 Twilio 进行入站调用,用户可以通过 Twilio-Number(从 Twilio 获得)调用应用程序并将被重定向到管理员。 现在,我们希望管理员使用相同的 Twilio 号码调用用户
C#/.NET 2.0 我需要解析一个字符串,其中包含街道名称和房屋编号的两个独立值。 in: "Streetname 1a" out: "streetname" "1a"
正如你们可能建议的那样,我正在创建一个带有语音命令的 SIRI。现在我确实想添加一个调用功能。例如我有这段代码: Intent call = new Intent(Intent.ACTION_DIAL
我想构建一个 android 应用程序,当设备第一次启动时,它会检测 IMEI 和其他设备信息,并检查是否有 SIM 卡。如果有 SIM 卡,它会发送短信包含特定号码的 IMEI 和其他设备信息。 我
我有这个对象: a = {"formData": { "total": "60.00", "tr0_RTN": "PZH", "tr0_amount": "10.00",
我正在制作一个测试工具,我有 imei 号码,但是否可以简单地或通过 NDK 更改 imei 号码。 谢谢 最佳答案 如何更改 IMEI 取决于硬件/系统,并且它是 - 至少在世界的(大部分)部分 -
我有一个表,其中有子项和父项,父项的 pid 为 0,子项的 pid 为父项的 id。我想选择父级及其子级数。 我的模型: function parent_child() {
抱歉,因为我从 android 开发跳到 IOS 开发,我想知道收到通知时是否有任何函数会触发?或者我应该如何处理通知? 这是我应用中的应用委托(delegate)。问题是每当收到消息时,如果应用程序
我正在开发应用程序,当它收到未接来电或来自手机的消息时自动发送消息。我的问题是当我从私有(private)号码收到未接来电或从私有(private)号码或服务器收到消息时(way2sms,160/2,
我想检查从联系人那里得到的电话号码是手机号码还是固定电话号码。我试过使用正则表达式,但一切都是徒劳的..任何帮助都将非常感激 最佳答案 要按手机号码和固定电话过滤联系人,您需要在数据库中有标准代码列表
我是一名优秀的程序员,十分优秀!