Javascript 仅接受字母和空格、数字和空格,以及不同框中带有空格的字母和数字

Javascript 仅接受字母和空格、数字和空格,以及不同框中带有空格的字母和数字,javascript,regex,Javascript,Regex,我不明白为什么这些正则表达式不能正常工作 我需要3种不同类型的表达式检查,但这些方法并不像预期的那样完全工作。它们“部分”工作,如#output2示例所示,其中响应结果是无效的,但它没有捕获第一个响应。我想我少了一些小东西 我正在尝试进行以下验证 编辑以澄清抱歉 var字母-应该只接受绝对没有数字或特殊字符的字母,但仍然允许空格,但最多只能有1个空格(因此不能有两个空格),并且不能以空格开头或结尾。空字符串仍应作为有效字符串传递 var数字-与var字母相同,但数字中没有字母,也没有特殊字符。任

我不明白为什么这些正则表达式不能正常工作

我需要3种不同类型的表达式检查,但这些方法并不像预期的那样完全工作。它们“部分”工作,如#output2示例所示,其中响应结果是无效的,但它没有捕获第一个响应。我想我少了一些小东西

我正在尝试进行以下验证

编辑以澄清抱歉

var字母-应该只接受绝对没有数字或特殊字符的字母,但仍然允许空格,但最多只能有1个空格(因此不能有两个空格),并且不能以空格开头或结尾。空字符串仍应作为有效字符串传递

var数字-与var字母相同,但数字中没有字母,也没有特殊字符。任何地方都没有引导或训练空间或双空间。空白条目仍然有效

var LETTESDIGITS-仅允许不带特殊字符的字母和数字。任何地方都没有引导或训练空间或双空间。空白条目仍然有效

var值='2A S2 S2 a';
var valueInValid='a 2'
var valueDigits='12321 asda 12312 2';
变量字母=/([a-zA-Z]+\s)*[a-zA-Z]+$/;//仅限不超过2个空格的字母
变量位数=/[\d+\s]*[\d]+$/;//仅限不超过2个空格的数字
var-lettersDigits=/[a-zA-Z\d+\s]*[a-zA-Z\d]+$/;//数字和字母不允许使用不超过2个空格的特殊字符
如果(字母测试(值)=假){
$(“#输出”).text(“无效”);
}否则{
$(“#输出”).text(“有效”);
}
if(字母测试(值无效)=false){
$(“#输出2”).text(“无效”);
}否则{
$(“#输出2”).text(“有效”);
}
if(digits.test(valueDigits)=false){
$(“#输出3”).text(“无效”);
}否则{
$(“#输出3”).text(“有效”);
}
如果(字母数字测试(值)=假){
$(“#输出4”).text(“无效”);
}否则{
$(“#输出4”).text(“有效”);
}
/*返回有效值*/
/*返回无效*/
/*返回有效值*/
/*返回有效值*/

您需要将锚点添加到正则表达式的开头,以便它匹配整个值,而不仅仅是值的结尾

要使某些内容成为可选内容,请使用
。要在事物之间最多允许一个空格,请将以空格结尾的表达式设为可选。要允许空输入,请将
^
$
之间的所有内容设置为可选

var值='2A S2 S2 a';
var valueInValid='a 2'
var valueDigits='12321 asda 12312 2';
变量字母=/^(([a-z]+\s)?[a-z]+)?$/i;//仅限不超过1个空格的字母
变量位数=/^((\d+\s)?\d+?$/;//仅限不超过1个空格的数字
var-lettersDigits=/^(([a-z\d]+\s)?[a-z\d]+)?$/i;//数字和字母不允许使用不超过1个空格的特殊字符
如果(字母测试(值)=假){
$(“#输出”).text(“无效”);
}否则{
$(“#输出”).text(“有效”);
}
if(字母测试(值无效)=false){
$(“#输出2”).text(“无效”);
}否则{
$(“#输出2”).text(“有效”);
}
if(digits.test(valueDigits)=false){
$(“#输出3”).text(“无效”);
}否则{
$(“#输出3”).text(“有效”);
}
如果(字母数字测试(值)=假){
$(“#输出4”).text(“无效”);
}否则{
$(“#输出4”).text(“有效”);
}

您需要将锚点添加到正则表达式的开头,以便它匹配整个值,而不仅仅是值的结尾

要使某些内容成为可选内容,请使用
。要在事物之间最多允许一个空格,请将以空格结尾的表达式设为可选。要允许空输入,请将
^
$
之间的所有内容设置为可选

var值='2A S2 S2 a';
var valueInValid='a 2'
var valueDigits='12321 asda 12312 2';
变量字母=/^(([a-z]+\s)?[a-z]+)?$/i;//仅限不超过1个空格的字母
变量位数=/^((\d+\s)?\d+?$/;//仅限不超过1个空格的数字
var-lettersDigits=/^(([a-z\d]+\s)?[a-z\d]+)?$/i;//数字和字母不允许使用不超过1个空格的特殊字符
如果(字母测试(值)=假){
$(“#输出”).text(“无效”);
}否则{
$(“#输出”).text(“有效”);
}
if(字母测试(值无效)=false){
$(“#输出2”).text(“无效”);
}否则{
$(“#输出2”).text(“有效”);
}
if(digits.test(valueDigits)=false){
$(“#输出3”).text(“无效”);
}否则{
$(“#输出3”).text(“有效”);
}
如果(字母数字测试(值)=假){
$(“#输出4”).text(“无效”);
}否则{
$(“#输出4”).text(“有效”);
}


这是Javascript,不是HTML。没有任何正则表达式用
^
锚定到字符串的开头。所以他们只是测试值的结尾,而不是整个值。我不完全理解每个正则表达式的意图。你能解释一下你想要验证的模式吗?(例如:“一系列字母,后跟一个或两个空格,依此类推”)。您的评论都说“不超过两个空格”。但是在任何正则表达式中都没有限制空格数的东西。另外,为什么字符类中有
+
,比如
[\d+\s]
?这允许使用数字、空格和
+
符号。我试图准确地解释在我编写每个reg表达式之后,每个人应该这样做。我想我应该更清楚对不起@据我所知,[\d+\s]会允许任何数字出现一次或多次,后跟一个空格吗?我理解错了吗?这是Javascript,不是HTML。没有一个正则表达式用
^
锚定到字符串的开头。所以他们只是测试值的结尾,而不是整个值。我不完全理解每个正则表达式的意图。你能解释一下吗
var value = '2 a s 2 s 2 a';
var valueInValid = 'a a a a a 2'
var valueDigits = '12321 asda 12312  2';

var letters = /([a-zA-Z]+\s)*[a-zA-Z]+$/; // only letters with no more than 2 spaces
var digits = /[\d+\s]*[\d]+$/; // only digits with no more than 2 spaces

var lettersDigits = /[a-zA-Z\d+\s]*[a-zA-Z\d]+$/; // digits and letters allowed no special characters no more than 2 spaces

if (letters.test(value) == false) {
$("#output").text("invalid");
} else {
$("#output").text("valid");
}

if (letters.test(valueInValid) == false) {
$("#output2").text("invalid");
} else {
$("#output2").text("valid");
}


if (digits.test(valueDigits) == false) {
$("#output3").text("invalid");
} else {
$("#output3").text("valid");
}


if (lettersDigits.test(value) == false) {
$("#output4").text("invalid");
} else {
$("#output4").text("valid");
}


<div id="output"></div> /* returns valid */
<div id="output2"></div> /* returns invalid */
<div id="output3"></div> /* returns valid */
<div id="output4"></div> /* returns valid */