如何在HTML表单中验证至少3个单词?

时间:2015-04-13 05:51:33

标签: javascript html regex validation counter

我一直试图解决这个问题,但我一直无法解决。我必须创建一个表单,我必须验证输入的名称,以便在JavaScript中至少包含3个单词。我认为最好的方法是使用Regex及其\ b属性。

这是

    <input type="text" class="texto" name="Nombre" id="name" title="nombre_cliente" style="color:#888;" placeholder="Nombre del cliente" />

我在JavaScript代码中的意思是:

        if(document.getElementById("name").value.match(RegExCodeForMin3Words) === null){
        alert("Name invalid");
    }

到目前为止,我还没有学会如何使正则表达式匹配单词的数量(我仍然是Regex的初学者)。你能帮我解决这个问题吗?也许Regex不是解决这个问题的最佳选择?

谢谢!

4 个答案:

答案 0 :(得分:3)

正则表达式匹配包含至少三个单词的字符串。

\S+\s+\S+\s+\S+

\S+匹配一个或多个非空格字符。如果您将单词表示为非空格字符的任意组合,则可以使用上述正则表达式。

\b\w+\b(?:.*?\b\w+\b){2}

DEMO

> /\b\w+\b(?:.*?\b\w+\b){2}/.test('foo bar buz')
true
> /\b\w+\b(?:.*?\b\w+\b){2}/.test('foo bar')
false
> /\b\w+\b(?:.*?\b\w+\b){2}/.test('foo bar bux foobar')
true

\w+匹配一个或多个单词字符。所以这形成了一个完整的单词。 (?:.*?\b\w+\b){2}确保第一个单词后面必须有另外两个单词。 {2}量词恰好重复前一个令牌两次。

答案 1 :(得分:3)

不要使用正则表达式来查找单词,这不是必需的。只是在空格上分开。

var wordCount = document.getElementById("name").trim().split(/\s+/).length;
if( wordCount < 3 ) { ... }

首先调用trim(),这样就没有错误分割的前导或尾随空格。然后将其拆分为\s+,即字符组空白空间1次或更多次。 split返回由分隔符分隔的所有组的数组,在本例中为空格。数组的元素将是所有“单词”,或输入中由空格分隔的任何内容。

答案 2 :(得分:2)

免责声明:在许多语言中,没有100%准确的标记化方法(分割单词)。

你不能使用\b,因为不幸的是,它与大多数带变音符号的字母(例如“é”)的“中断”相匹配。

浪漫语言的简单近似是寻找空格和撇号。

/.+?(?:[\s'].+?){2,}/

说明:

  • [\ s'] 匹配空格字符或撇号。它可以根据你的需要进行改进(可能包括标点符号等),但想法是它是“单词之间的东西”。这部分决定了标记器的质量。
  • 。+?匹配任何其他无法匹配的非空字符串。它没有说明什么构成一个词。
  • (?: [\ s']。+?只是一个分隔符的序列和“分隔符之间的字符串”(我们希望这个词) 。开头的?:会阻止引擎在括号中捕获组,但这并不是必需的。我们希望括号将量词应用于整个序列。
  • 最终的正则表达式,。+?(?:[\ s']。+?) {2,} 表示“一个字,然后是2次或更多次分隔符的序列+单词“(总共2 + 1 =最少3个单词)。

此外,您可以使用pattern attribute声明性地验证文本字段,而不是使用JavaScript:

<input type="text" name="Nombre" … required pattern=".+?(?:[\s'].+?){2,}">

答案 3 :(得分:-6)

我猜你可以在javascript中使用这个变量的长度方法。

例如: var s =&#34; 123456&#34 ;; 你可以通过s.length得到长度