如何验证 HTML 表格中至少 3 个单词?
How can I validate a minimum of 3 words in a HTML form?
一段时间以来,我一直在尝试解决这个问题,但始终无法解决。我必须制作一个表格,并且我必须验证输入的名称在 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");
}
到目前为止,我一直无法学习如何使正则表达式匹配单词的数量(我仍然是正则表达式的初学者)。你能帮我解决这个问题吗?也许正则表达式不是解决这个问题的最佳选择?
谢谢!
匹配至少包含三个单词的字符串的正则表达式。
\S+\s+\S+\s+\S+
\S+
匹配一个或多个非 space 字符。如果您将单词表示为非 space 字符的任意组合,那么您可以使用上面的正则表达式。
或
\b\w+\b(?:.*?\b\w+\b){2}
> /\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}
量词恰好重复前一个记号两次。
免责声明:在许多语言中,没有 100% 准确的分词(拆分单词)方法。
您不能使用 \b
,因为不幸的是,它与大多数带有变音符号(例如“é”)的字母周围的 "break" 相匹配。
浪漫语言的一个简单近似是寻找空格和撇号。
/.+?(?:[\s'].+?){2,}/
解释:
- [\s'] 匹配空白字符或撇号。它可以根据需要进行改进(可以包括标点符号等),但想法是它是 "stuff between words"。这部分决定分词器的质量。
- .+? 匹配任何其他不能匹配的非空字符串。它没有说明什么是单词。
- (?:[\s'].+?) 只是分隔符和 [=49= 的序列](一句话,我们希望)。开头的
?:
会阻止引擎捕获括号中的组,但这并不是真正必要的。我们希望括号将量词应用于整个序列。
- 最终的正则表达式,.+?(?:[\s'].+?){2,} 表示 "a word, then 2 or more times the sequence of a delimiter + a word"(最少总共2+1=3个字)。
此外,您可以使用 pattern attribute:
以声明方式验证您的文本字段,而不是使用 JavaScript
<input type="text" name="Nombre" … required pattern=".+?(?:[\s'].+?){2,}">
我猜你可以在 javascript.
中对这个变量使用 length 方法
例如:
var s="123456";
你可以通过 s.length
得到长度
不要使用正则表达式来查找单词,没有必要。只是按空格分割。
var wordCount = document.getElementById("name").trim().split(/\s+/).length;
if( wordCount < 3 ) { ... }
首先调用 trim()
,这样就没有会被错误拆分的前导或尾随空格。然后将其拆分为 \s+
字符组空格 1 次或多次。 split
returns 由分隔符分隔的所有组的数组,在本例中为空格。数组的元素将全部为 "words",或者输入中由空格分隔的任何内容。
一段时间以来,我一直在尝试解决这个问题,但始终无法解决。我必须制作一个表格,并且我必须验证输入的名称在 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");
}
到目前为止,我一直无法学习如何使正则表达式匹配单词的数量(我仍然是正则表达式的初学者)。你能帮我解决这个问题吗?也许正则表达式不是解决这个问题的最佳选择?
谢谢!
匹配至少包含三个单词的字符串的正则表达式。
\S+\s+\S+\s+\S+
\S+
匹配一个或多个非 space 字符。如果您将单词表示为非 space 字符的任意组合,那么您可以使用上面的正则表达式。
或
\b\w+\b(?:.*?\b\w+\b){2}
> /\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}
量词恰好重复前一个记号两次。
免责声明:在许多语言中,没有 100% 准确的分词(拆分单词)方法。
您不能使用 \b
,因为不幸的是,它与大多数带有变音符号(例如“é”)的字母周围的 "break" 相匹配。
浪漫语言的一个简单近似是寻找空格和撇号。
/.+?(?:[\s'].+?){2,}/
解释:
- [\s'] 匹配空白字符或撇号。它可以根据需要进行改进(可以包括标点符号等),但想法是它是 "stuff between words"。这部分决定分词器的质量。
- .+? 匹配任何其他不能匹配的非空字符串。它没有说明什么是单词。
- (?:[\s'].+?) 只是分隔符和 [=49= 的序列](一句话,我们希望)。开头的
?:
会阻止引擎捕获括号中的组,但这并不是真正必要的。我们希望括号将量词应用于整个序列。 - 最终的正则表达式,.+?(?:[\s'].+?){2,} 表示 "a word, then 2 or more times the sequence of a delimiter + a word"(最少总共2+1=3个字)。
此外,您可以使用 pattern attribute:
以声明方式验证您的文本字段,而不是使用 JavaScript<input type="text" name="Nombre" … required pattern=".+?(?:[\s'].+?){2,}">
我猜你可以在 javascript.
中对这个变量使用 length 方法例如: var s="123456"; 你可以通过 s.length
得到长度不要使用正则表达式来查找单词,没有必要。只是按空格分割。
var wordCount = document.getElementById("name").trim().split(/\s+/).length;
if( wordCount < 3 ) { ... }
首先调用 trim()
,这样就没有会被错误拆分的前导或尾随空格。然后将其拆分为 \s+
字符组空格 1 次或多次。 split
returns 由分隔符分隔的所有组的数组,在本例中为空格。数组的元素将全部为 "words",或者输入中由空格分隔的任何内容。