JavaScript:从字符串中猜出数据类型

时间:2013-05-27 14:42:57

标签: javascript

我正在寻找一个可以告诉我字符串可能被转换的数据类型的函数。 例子:

“28.98”导致浮动(。作为分隔符)

“44.332,95”导致浮动(作为分隔符)

“29/04/14”会产生日期(应该是国际化的 - >不同的日期格式)

“34.524”导致int(.as as delimited)

“所有其余”会产生字符串

理想情况下(这些是字符串的子类):

“something@example.com”会产生电子邮件

“+ 49/2234/234567”导致电话

是否有(开源)库可以做这样的事情?

谢谢!

3 个答案:

答案 0 :(得分:5)

你有它。不是库,不健康的正则表达式,但它适用于您的示例。如果您需要其他相关内容,请添加更多示例。对评论中的批评或要求持开放态度。

function getType(str){
    if (typeof str !== 'string') str = str.toString();
    var nan = isNaN(Number(str));
    var isfloat = /^\d*(\.|,)\d*$/;
    var commaFloat = /^(\d{0,3}(,)?)+\.\d*$/;
    var dotFloat = /^(\d{0,3}(\.)?)+,\d*$/;
    var date = /^\d{0,4}(\.|\/)\d{0,4}(\.|\/)\d{0,4}$/;
    var email = /^[A-za-z0-9._-]*@[A-za-z0-9_-]*\.[A-Za-z0-9.]*$/;
    var phone = /^\+\d{2}\/\d{4}\/\d{6}$/g;
    if (!nan){
        if (parseFloat(str) === parseInt(str)) return "integer";
        else return "float";
    }
    else if (isfloat.test(str) || commaFloat.test(str) || dotFloat.test(str)) return "float";
    else if (date.test(str)) return "date";
    else {
        if (email.test(str)) return "e-mail";
        else if (phone.test(str)) return "phone";
        else return "string";
    }
}

答案 1 :(得分:-2)

自从我使用JavaScript框架以来已经有一段时间了,但你正在做的工作相当简单。您可以通过检查字符串中是否存在逻辑差异(您在此处显示它们的方式)来自行完成。例如,您可以使用indexOf() JavaScript函数检查字符串中是否存在@符号。如果同时包含点和逗号,则表示您获得浮点数。最后,28.98和34.524之间的差异无法以任何方式呈现,因为.始终是数字的浮点标记,这意味着34.524是人类和计算机的浮点数。

希望它有所帮助 - 可能不是你要求的图书馆!

indexOf() function in w3schools.com

答案 2 :(得分:-2)

你可以使用像这样的对象来实现这个目的:

{
    "float" : "^[-+]?[0-9]*\.?[0-9]+$",
    "int" : "some regex",
    "etc" : "some regex"
}

// Use RegExp to test the object elements against the value. 
var patt1=new RegExp("e");
// When true you found your match.
patt1.test(value_to_test)

通过这些信息,您应该能够开发自己的图书馆并与全世界分享!

如果您需要额外帮助,请询问。

致以最诚挚的问候,

塞尔吉奥