JS:用于匹配数字和空格的正则表达式?

11

我正在使用happyJS,并且使用下面的正则表达式进行电话验证

phone: function (val) {
        return /^(?:[0-9]+$)/.test(val);
    }

但是这只允许输入数字。我希望用户也能够输入空格,就像这样:

238 238 45383

你知道为什么 return /^(?:[0-9 ]+$)/.test(val); 没起作用吗?


5
/^(?:[0-9 ]+$)/.test("238 238 45383"); 返回 true。看起来是有效的。 - Anirudh Ramanathan
@raina77ow 嗯,你是绝对正确的!我很抱歉。我刚刚发现有一些服务器端缓存正在进行中,这会导致我的脚本文件无法重新加载。我测试了100次,但它没有显示效果。现在一切似乎都正常了。是的,你是正确的 - 我提供的代码完全正常。 - matt
5个回答

10

这是我的建议方案:

/^(?=.*\d)[\d ]+$/.test(val)

(?=.*\d)表示输入中至少有一个数字。否则,只包含空格的输入也可以匹配。

请注意,这不对数字的数量(仅确保至少有1个数字)或空格应出现在输入的位置上施加任何约束。


@raina77ow:对于?:来说,我想并不是很重要。我只是模仿OP的代码。而且你的测试用例是错误的,比OP的解决方案还糟糕。/[0-9]/将检查是否存在数字,/^[0-9 ]/则检查字符串开头是否存在数字或空格。即使在它们后面加上+,它们仍然是错误的。 - nhahtdh
@nhahtdh,当然应该是 /[^0-9 ]/。重点是,将两个简单的东西配合使用比开发一个复杂的东西更容易构建(和维护) - 正则表达式通常也不例外。 - raina77ow
@raina77ow:我理解你编写正则表达式的意图(逻辑非测试结果),但空字符串或仅包含空格的字符串将通过测试。 - nhahtdh
空字符串是否可以通过 /[0-9]/ && ! /[^0-9 ]/ 的测试? - raina77ow
@raina77ow:我想我误解了你原来的评论(已被删除)。我现在明白你的意思了,而且我认为你可以写下自己的答案。 - nhahtdh

6

尝试

phone: function (val) {
    return /^(\s*[0-9]+\s*)+$/.test(val);
}

为了实现上述要求,至少需要存在一个数字,但请参考 此处的正则表达式示例

这个代码会强制要求一个空格存在,而不是允许可选的空格。请使用这个代码代替:return /^([0-9\s)+/.test(val); - Andy Lorenz
@AndyLorenz 请检查您的正则表达式,因为它实际上并不起作用 :) - Bruno
很好的发现:返回 /^([0-9\s]+)$/.test(val); - Andy Lorenz

1
你可以尝试以下正则表达式来检查数字和空格。
function isTextAndNumberSpaceOnly(text) {
    var regex = /^[0-9 ]+$/;
    if (regex.test(text)) {
        return true;
    } else {
        return false;
    }
}

1

尝试

/^[\d ]*$/.test("238 238 45383")

console.log(/^[\d ]*$/.test("238 238 45383"));


0

个人使用此代码,它可以正常工作:

function validateMobile(mob) 
{ 
     var re = /^09[0-9]{9}$/
     if(mob.match(re))
         return true;
     else
        return false; 
}

电话号码格式因国家而异。您的正则表达式中的前缀09已经对号码格式做出了一些假设。 - nhahtdh

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