Javascript 使用Regex确保在'&';?

Javascript 使用Regex确保在'&';?,javascript,jquery,regex,Javascript,Jquery,Regex,我试图找到一种最好的方法来检测用户是否在文本字段中输入了“&”,并确保后面有空格 例如,如果用户输入: Apples & Oranges 一切顺利。但是,如果他们进入: Apples &Oranges 他们收到警报。或者如果他们有: Apples&Oranges 同样的事情 确保用户输入“&”后有空格的最佳方法是什么 以下是我目前掌握的代码: function entityKiller() { var good = true; $('input[typ

我试图找到一种最好的方法来检测用户是否在文本字段中输入了“&”,并确保后面有空格

例如,如果用户输入:

  Apples & Oranges
一切顺利。但是,如果他们进入:

 Apples &Oranges
他们收到警报。或者如果他们有:

 Apples&Oranges
同样的事情

确保用户输入“&”后有空格的最佳方法是什么

以下是我目前掌握的代码:

 function entityKiller() {
var good = true;

 $('input[type=text]:visible').each( function() {
        if(/----Regex Here-----/.test($(this).val())) {
            good = false;
            return;
        }
});

return good;
}


有人能给我指出正确的方向吗?

你可以试着找到后面跟一个非空格字符的
&
。如果是,则反转
测试的输出

if(!(/&\S/.test($(this).val()))) {
    ...
}
如果您的模式以
&
结尾,该怎么办?在这种情况下,
后面没有空格。但是,我上面的例子会认为它是有效的。如果不应该,那么您需要找到一个不后跟空格的
&
(而不是后跟非空格的):

丑陋,丑陋,多重否定

编辑:

正如Anton指出的,这假设您希望在
&
之后允许任何类型的空格。如果您真的只需要空格字符,则模式将变为:

/&[^ ]/

编辑2:

顺便说一下,如果您真的想避免使用负逻辑,您必须检查字符串中的每个
&
后面是否都有空格。这就是这种模式:

/^[^&]*(?:&[ ][^&]*)$/

在锚定
^
$
的位置,确保整个字符串与模式匹配。

尝试此正则表达式,后面不跟空格

/&[^\s]/

如果没有
&
或有
&
且后跟[space]返回
“success”


我认为最好的方法是检查是否有无空格的符号,并在提交数据时自动添加它们。在我看来,给用户这样的警告有点麻烦

无论采用哪种方式,都可以使用此正则表达式来匹配后跟或后跟非空格字符的“与”的实例:

/(&[^ ]+)|([^ ]+&)/
您可以处理代码,从这里添加空间

注意:我没有使用\s,因为它在空格、制表符和换行符上也匹配,而且在你的问题中,你只要求空格。

这个怎么样:

[a-zA-Z]*\\s&\\s[A-Za-z]*
    |      |        |
  anytext  |        |
           |        anytext
          Space
/&[^\w]/

它将允许&后跟任何空格字符。如果需要,请用空格替换\w。在此处测试:

您可以尝试使用此:

$('input[type="text"]').keydown(function() {
    var regex = /[^a-z*]+&+[ ]+[a-z*]/;
    if (regex.test($('input[type="text"]').val())) {
       $('span').text('good match');
    } else {
       $('span').text('not matched');
    }
});

你认为应该是怎样的?@streetlight:下面的答案建议使用
\s
,它是任何空格,与空格字符不同。小心。如果用户在符号后面插入制表符或换行符,他们的正则表达式也会起作用——我不确定这对您来说是否是个问题。在任何情况下,如果您只想检查符号后面的空格,最好的方法是
&
不要使用\s,除非您也想匹配空格、制表符和换行符(这就是它的作用)。@Anton yeah当然。。。抱歉,将问题解释为对空格感兴趣
[a-zA-Z]*\\s&\\s[A-Za-z]*
    |      |        |
  anytext  |        |
           |        anytext
          Space
/&[^\w]/
$('input[type="text"]').keydown(function() {
    var regex = /[^a-z*]+&+[ ]+[a-z*]/;
    if (regex.test($('input[type="text"]').val())) {
       $('span').text('good match');
    } else {
       $('span').text('not matched');
    }
});