Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式验证表单(Javascript正则表达式)_Javascript_Regex - Fatal编程技术网

使用正则表达式验证表单(Javascript正则表达式)

使用正则表达式验证表单(Javascript正则表达式),javascript,regex,Javascript,Regex,我有一个需要实时验证的输入表单(.Keyup和.Load) 它应该允许所有A-z字符(大写和小写)以及符号“'”、“-”和“”(撇号、破折号和空格) 目前,这就是我所拥有的:([A-Za-z]-\s\')* 我是这样使用它的: var regex = /([A-Za-z]\-\s\')*/; if (string == "") { turn textbox border grey (default) } else if (!regex.test(string)) { turn textb

我有一个需要实时验证的输入表单(.Keyup和.Load)

它应该允许所有A-z字符(大写和小写)以及符号“'”、“-”和“”(撇号、破折号和空格)

目前,这就是我所拥有的:([A-Za-z]-\s\')* 我是这样使用它的:

var regex = /([A-Za-z]\-\s\')*/;
if (string == "") {
  turn textbox border grey (default)
} else if (!regex.test(string)) {
  turn textbox border red
} else {
  turn textbox border green
}
它所做的一切就是每次都将文本框变为绿色(除非它为空白-变为灰色)。
正确的表达方式/技巧是什么?我做错了什么

您需要以下内容:

var regex = /^[A-Za-z\-\s']*$/;
^
$
分别是字符串锚定的开始和结束。如果没有这些,比赛可以在字符串中的任何位置开始或结束。因为
*
意味着“将前一个元素重复零次或多次”,所以无论内容如何,您都将匹配每个字符串,因为正则表达式可以成功匹配零个字符

当前正则表达式的另一个问题是
[A-Za-z]\-\s\'
将尝试按顺序匹配字母、破折号、单个空白字符和撇号(总共4个字符)。要匹配这些选项中的任何一个,您需要将它们全部放在字符类(方括号)内,或者使用管道字符(
|
)的替换,它看起来像
([A-Za-z]|-|\s|')
。交替更为普遍,但字符类是此类操作的首选方法


关于转义,撇号在正则表达式中没有特殊意义,因此不需要转义。破折号只有在字符类内部时才需要转义(如果未转义,则将其解释为范围的一部分)。

您需要以下内容:

var regex = /^[A-Za-z\-\s']*$/;
^
$
分别是字符串锚定的开始和结束。如果没有这些,比赛可以在字符串中的任何位置开始或结束。因为
*
意味着“将前一个元素重复零次或多次”,所以无论内容如何,您都将匹配每个字符串,因为正则表达式可以成功匹配零个字符

当前正则表达式的另一个问题是
[A-Za-z]\-\s\'
将尝试按顺序匹配字母、破折号、单个空白字符和撇号(总共4个字符)。要匹配这些选项中的任何一个,您需要将它们全部放在字符类(方括号)内,或者使用管道字符(
|
)的替换,它看起来像
([A-Za-z]|-|\s|')
。交替更为普遍,但字符类是此类操作的首选方法


关于转义,撇号在正则表达式中没有特殊意义,因此不需要转义。破折号只有在字符类内部时才需要转义(如果未转义,则将其解释为范围的一部分)。

您需要以下内容:

var regex = /^[A-Za-z\-\s']*$/;
^
$
分别是字符串锚定的开始和结束。如果没有这些,比赛可以在字符串中的任何位置开始或结束。因为
*
意味着“将前一个元素重复零次或多次”,所以无论内容如何,您都将匹配每个字符串,因为正则表达式可以成功匹配零个字符

当前正则表达式的另一个问题是
[A-Za-z]\-\s\'
将尝试按顺序匹配字母、破折号、单个空白字符和撇号(总共4个字符)。要匹配这些选项中的任何一个,您需要将它们全部放在字符类(方括号)内,或者使用管道字符(
|
)的替换,它看起来像
([A-Za-z]|-|\s|')
。交替更为普遍,但字符类是此类操作的首选方法


关于转义,撇号在正则表达式中没有特殊意义,因此不需要转义。破折号只有在字符类内部时才需要转义(如果未转义,则将其解释为范围的一部分)。

您需要以下内容:

var regex = /^[A-Za-z\-\s']*$/;
^
$
分别是字符串锚定的开始和结束。如果没有这些,比赛可以在字符串中的任何位置开始或结束。因为
*
意味着“将前一个元素重复零次或多次”,所以无论内容如何,您都将匹配每个字符串,因为正则表达式可以成功匹配零个字符

当前正则表达式的另一个问题是
[A-Za-z]\-\s\'
将尝试按顺序匹配字母、破折号、单个空白字符和撇号(总共4个字符)。要匹配这些选项中的任何一个,您需要将它们全部放在字符类(方括号)内,或者使用管道字符(
|
)的替换,它看起来像
([A-Za-z]|-|\s|')
。交替更为普遍,但字符类是此类操作的首选方法


关于转义,撇号在正则表达式中没有特殊意义,因此不需要转义。破折号只有在字符类内部时才需要转义(如果未转义,则将其解释为范围的一部分)。

什么是不起作用的?你期望发生什么?到底发生了什么?我已经回答了这些问题。什么不起作用:正则表达式测试。我期望的是:阅读代码。如果它满足正则表达式条件,那么它应该将您键入的输入字段变成绿色。否则它会变成红色。空白时是灰色的。发生的情况:无论您键入什么,它都会变为绿色。因此,如果密钥是他们刚刚释放的字符,``或
------
'
是有效的输入吗?你们不能把范围缩小到某种类型的实际最终验证的边缘条件吗?什么是不起作用的?你期望发生什么?到底发生了什么?我已经回答了这些问题