JavaScript正则表达式 - 必填字段验证

9

如何使用JavaScript RegExp检查字段(文本框)是否为空或仅填充了空格(空格/回车/制表符等)?

3个回答

15
if (myField.value.match(/\S/)) {
  // field is not empty
}
// or
if (/\S/.test(myField.value)) {
  // field is not empty
}

由于其他人似乎有一些不同的想法,所以需要解释:

\s 可以匹配空格、制表符或换行符。
\S 可以匹配除空格、制表符或换行符之外的任何字符。
如果您的字符串只有一个字符,且不是空格、制表符或换行符,则它不是空的。
因此,您只需要搜索一个字符:\S


test() 函数在 RegExp 对象上使用:"/\S/.test(myField.value)" - Tomalak
是的,我总是把它们两个搞混。 - nickf
我喜欢这种简单的方法。但是我认为否定的负逻辑(“如果值不包含非空格字符”)对于代码的可理解性并没有太大的贡献。 - Tomalak

5
/^\s*$/.test(string)

可以这样使用:

var empty_string = /^\s*$/; //create RegExp object for re-use

if (empty_string.test(myFormField.value))
{
  alert("Please be a bit more elaborate!");
}

1

通过测试

/\s/ or /\S/
you will only be testing for one character . So , it will be better to test instead for :

/^\s+$/ or /^\S+$/

编辑:请注意,不是代码的一部分。

编辑2:

匹配测试:


if(string.match(/^\s+$/)) {
   alert("string is empty!");
}

而对于不匹配的测试:


if(!string.match(/^\S+$/)) {
   alert("string is empty!");
}

你可以使用其中任何一个来达到相同的结果。


后者对于空字符串将失败。我相当确定问题的作者也想包括这一点。而且为什么要使用“\S”?它将匹配除空格以外的任何内容,因此在这里是错误的。 - Tomalak
我知道。这可以通过两种方式工作:您可以测试/^\s+/以进行匹配,或者您可以测试/^\S+/以进行非匹配。 - Geo
嗯,我没有考虑“不匹配”的逻辑。很好的发现。 - Tomalak
尽管这并不明显,但你应该在回答中更清晰地区分。 - Tomalak
/^\S+$/会在输入“This is not empty”时出现误报。/^\s+$/会在输入“”时漏报。如果你找到了任意一个非\s字符(即\S),那么它就不是空的。这非常简单! - nickf

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