0

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

例如,如果用户输入:

  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;

}

谁能指出我正确的方向?

4

7 回答 7

1

您可以尝试查找&后跟非空格字符。如果然后反转 的输出test

if(!(/&\S/.test($(this).val()))) {
    ...
}

如果你的模式以 结尾&怎么办?在这种情况下, 之后没有空格&。但是,我上面的例子会认为它是有效的。如果不应该,那么您需要找到一个&后面没有空格的(而不是后面跟着非空格的):

if(!(/&(?!\s)/.test($(this).val()))) {
    ...
}

丑,丑,多重否定。

编辑:

正如 Anton 指出的那样,这假设您希望在&. 如果您真的只想要空格字符,则模式变为:

/&[^ ]/

/&(?![ ])/

编辑2:

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

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

锚点在哪里,^$确保整个字符串与模式匹配。

于 2012-12-13T16:24:07.000 回答
0

试试这个正则表达式 & 后面不是空格

/&[^\s]/
于 2012-12-13T16:25:21.007 回答
0

如果没有 an&或有an &,则后面跟着 [space] return "success"

if( $(this).val().match(/(&\s)?/g) ) { /* ok */ }
于 2012-12-13T16:25:39.597 回答
0

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

无论哪种方式,使用此 RegEx 来匹配与符号后面或前面不是空格的字符的实例:

/(&[^ ]+)|([^ ]+&)/

您可以处理代码以从此处添加空间。

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

于 2012-12-13T16:27:22.443 回答
0
[a-zA-Z]*\\s&\\s[A-Za-z]*
    |      |        |
  anytext  |        |
           |        anytext
          Space
于 2012-12-13T16:33:40.703 回答
0

这个怎么样:

/&[^\w]/

它将允许 & 后跟任何空白字符。如果您需要,将 \w 替换为空格。在这里测试它:http: //jsfiddle.net/X7c6T/

于 2012-12-13T16:35:10.227 回答
0

你可以试试这个:http: //jsfiddle.net/L2yr2/

$('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');
    }
});
于 2012-12-13T16:51:05.413 回答