我正在尝试验证可以包含电子邮件地址或电话号码的字段。怎么会这样做呢?我觉得我的代码很接近,但我对数字部分有点卡住了。
if (($(this).find('#contactPhoneEmail').val().indexOf('@') != -1) && ($(this).find('#contactPhoneEmail').val().indexOf('@') != -1)){
alert("You did not enter a valid contact type");
return false; // prevents submitting
}
在伪代码中,我正尝试以下内容:
"如果该字段不包含' @' AND'数字'发出警报"
我知道它不是完全全面的,但它至少会阻止人们输入字母字符。我的表单使用相同的字段来允许人们选择电子邮件地址或电话号码。我也考虑过做以下的事情
"如果它只包含数字,那么请确保它是正确的格式"但是我意识到有各种各样的电话号码类型,似乎无法确定。
你们有什么想法?
答案 0 :(得分:2)
使用正则表达式:
function isEmail (s) {
var isEmail_re = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
return String(s).search (isEmail_re) != -1;
}
function isPhoneNumber (s) {
var isPhoneNumber_re = /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/;
return String(s).search (isPhoneNumber_re) != -1;
}
您的验证功能将如下:
function validate () {
var input = $(this).find('#contactPhoneEmail').val();
return isEmail(input) || isPhoneNumber(input);
}
答案 1 :(得分:1)
我个人会这样做
function submit_form() {
if (validate()) {
// ajax send or submit form.
}
}
function validate() {
field = $('.some-div').val();
if (field.match("/emailRegex/i") || field.match("/phoneRegex/i")) {
return true;
} else {
return false;
}
}
互联网上有很多正则表达式(正则表达式),我会说找一些你满意的。
还有几种方式可以提交表单。您可以将submit_form()
函数绑定到提交按钮,并使其发送包含数据的表单,或者使其取消表单提交,并在验证通过后发送。
编辑 - 有点误读的问题。
答案 2 :(得分:0)
如果您的逻辑是检查一个字段,并且它是否有' @'在其中,您可以认为它是有效的电子邮件,或者如果它没有' @'在它,然后它只能是数字(即0-9),然后像下面这样的东西应该实现你的目标。
function checkPhoneEmailValid()
{
var phoneEmailValue = $('#contactPhoneEmail').val();
var regExTester = /@|^[0-9]+$/; //This is a Regular Expression that checks for the occurance of a @
// or the whole string only contain numbers 0-9
return regExTester.test(phoneEmailValue); //This will return true or false;
}
虽然这些规则非常基础,但有更好的方法来测试电子邮件和/或电话号码。此外,您需要确定电话号码允许使用哪些字符,如果您包含国家/地区代码或区号,则需要更改正则表达式。谷歌正则表达式的电话号码/电子邮件,你会发现更全面的选项