如何在jquerykeypress事件上获得一个完整的单词(不是完整的值)?

pqwbnv8z  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(393)

我在做一个项目,我想大写每个字,因为你在文本区键入按键事件。现在,我只从几个词开始,比如 SELECT , FROM 以及 WHERE ,在mysql中默认称为保留字。
我已经创建了一个数组来存储这些单词。但是现在我面临的问题是如何在你打字的时候得到整个单词。
我几乎没有得到其他stackoverflow线程的帮助,但我无法得到任何帮助来获得整个单词的值,因为你键入的字母。
示例:原始字符串如下 select name from accounts where id = '123' 当您键入上面的字符串时,结果应该是这样的 SELECT name FROM accounts WHERE id = '123' 到目前为止,我只能将textarea中的一个单词大写,但当我尝试输入整个sql时却做不到。下面是我正在使用的代码

$("#test").keyup(function () {
    var arr = ['SELECT', 'FROM', 'WHERE'];
    for (var i in arr) {
        if(arr[i].toUpperCase().indexOf($(this).val().toUpperCase()) == 0){
            $(this).val($(this).val().toUpperCase());
            break;
        }
    }
});
klh5stk1

klh5stk11#

将字符串按空格拆分并Map结果数组,然后用空格连接回去

var $input = $("#test").on('input',function () {
    var arr = ['SELECT', 'FROM', 'WHERE'];
    $(this).val(function(_, currVal){
        return currVal.split(' ').map(function(word){
            return arr.includes(word.toUpperCase())? word.toUpperCase() : word;
        }).join(' ')
    })
})

// set value and trigger event for demo
$input.val("select name from accounts where id = '123'").trigger('input');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="test" style="width:100%">
q9rjltbz

q9rjltbz2#

可以使用正则表达式(忽略大小写)替换val()中的所有单词,如下所示:

$("#test").keyup(function () {
    var arr = ['SELECT', 'FROM', 'WHERE'];
    for (var i in arr) {
        // "i" ignores case and "g" makes the search global
        var regEx = new RegExp(arr[i], "ig");
        $(this).val($(this).val().replace(regEx, arr[i]));
    }
});
nwo49xxi

nwo49xxi3#

你可以用bourdaries这个词 \b 使用正则表达式 input 甚至检测到字符串的复制粘贴

$("#test").on('input', function() {
  var arr = ['SELECT', 'FROM', 'WHERE'];
  let elem = $(this);
  for (var i = 0; i < arr.length; i++) {
    let regex = new RegExp('\\b(' + arr[i] + ')\\b', "gi");
    elem.val(elem.val().replace(regex, arr[i]));
  }
});
textarea {
  width: 100%;
  height: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="test"></textarea>

相关问题