如何在javascript中检查字符串是否以数字开头

5

我正在尝试确定用户输入的是电子邮件地址还是电话号码。因此,我想要检查字符串是否以+1或数字开头来确定它是否为电话号码。如果不是任何一个,我就得出结论它是一个电子邮件地址,或者我可以检查它是否以字母开头以确保其是电子邮件地址。如何检查这个呢?如果用正则表达式的话,我很糟糕。


2
为什么它们被放置在同一个字段中? - Jack
如果您知道它始终是其中之一,则检查它是否包含“@”。如果是,则为电子邮件,否则为电话号码。 - Matt
4个回答

7

您可以使用正则表达式来实现,但是使用简单的if语句也可以,并且更易读。如果字符串中不存在@字符并且第一个字符是数字,则可以合理地假设它是电话号码。否则,如果存在@,则很可能是电子邮件地址。否则,输入很可能无效。if语句如下:

if(yourString.indexOf("@") < 0 && !isNaN(+yourString.charAt(0) || yourString.charAt(0) === "+")) {
    // phone number
} else if(yourString.indexOf("@") > 0) {
    // email address
} else {
    // invalid input
}

如果字符串中没有@字符并且是一个数字...电话号码经常包括非数字字符,例如()ext 1324 - T.J. Crowder
这是最适合我的答案,因为它解决了我当前的问题。谢谢。 - vijar
嗯,没错,@T.J.Crowder。一个电话号码输入验证库(或非常长的正则表达式)可能是解决这个问题的最佳选择。不过,目前我们可以只检查电话号码的第一个字符。 - Elliot Bonneville
验证电话号码几乎总是一个愚蠢的任务。我会将它们分开输入。如果它们必须是一个输入(因为某些高层人员很傻),那么仅有@的存在对我来说已经足够了。 - T.J. Crowder
因为您只解析第一个字符,这并不处理电话号码以“+1”开头的情况。 - ty.
这真的很正确,@T.J.Crowder。我想我只会坚持使用OP逻辑的实现。ty,你是正确的。编辑以修复。 - Elliot Bonneville

4
if (!isNaN(parseInt(yourstrung[0], 10))) {
  // Is a number
}

2
你可以省略[0],因为如果字符串以数字开头,parseInt将忽略其他字符。 - Givi
1
如果您想正确处理“+1 44 1234 5678”,则可以并且应该这样做。 - T.J. Crowder

3

只需要按照以下步骤即可:

if ( !isNaN(parseInt(inputString)) ) {
    //this starts with either a number, or "+1"
}

顺便提一下,parseInt("+1foo") 的结果是 1|| 是不必要的。此外,.substr(0,1) 永远不可能等于 '+1',因为它最多只能是一个字符长。 - T.J. Crowder
1
这并没有检测到+1的情况,因为你只解析了字符串的第一个字符。 - ty.
@ty。啊,抱歉,我忘记在T.J.的建议后更改了它。 - Joeytje50
你忘了进制。 - Givi

1
我可以建议使用在这里找到的正则表达式电子邮件验证,采用稍微不同的方法。
if(validateEmail(input_str)) {
    // is an email
} else if(!isNaN(parseInt(input_str))) {
    // not an email and contains a number
} else {
    // is not an email and isn't a number
}

function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
}

这样你可以更彻底地检查输入内容,而不仅仅是猜测它是其中之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接