搜索字符串中的通配符

Wild cards in a search string

本文关键字:通配符 字符串 搜索      更新时间:2023-09-26

我正在尝试建立一个函数,以检查是否通配符将在搜索字符串中使用。

的例子。

%name% var search_type = "LIKE"
%name var search_type = "LIKE"
name% var search_type = "LIKE"
name   var search_type = "EQUALS"

如何写一个javascript正则表达式来证实4种类型的例子之间?

<html>
<head>
<script type="text/javascript">
function test() {
var name = document.getElementById("search").value

}

</script>

</head>
<body>
<input type="text" id="search">
<input onclick="test()" type="submit" value="Submit">
</body>
</html>

这是一个DEMO

function test() {
    var name = document.getElementById("search").value;
    var search_type = '';
    if (name.indexOf('%') > -1) {
        search_type = 'like';
    } else {
        search_type = 'equals';
    }
    alert(search_type);
    return search_type;
}


无论%符号在文本中的位置如何,上述代码都将起作用。如果您对应该位于开始或结束或两者都有兴趣,请使用下面的代码。
演示

function test() {
    var name = document.getElementById("search").value;
    var position = name.indexOf('%');
    var search_type = '';
    if (position === 0 || position === name.length) {
        search_type = 'like';
    } else {
        search_type = 'equals';
    }
    alert(search_type);
    return search_type;
}

根据您的示例,search_type应该是LIKE的唯一指示是该值包含百分比符号%。在这种情况下,你可以使用indexOf('%')来检查它是否有一个:

var search_type = (someValue.indexOf('%') > -1) ? 'LIKE' : 'EQUALS';

使用当前代码:

function test() {
    var search_type = (document.getElementById("search").value.indexOf('%') > -1) ? 'LIKE' : 'EQUALS';
    // any other processing required...
    return search_type;
}

此外,如果您想明确%必须位于字符串的开头、结尾或开头+结尾,并且将为每个使用不同的修饰符,则可以使用递增标志:

var search_flag = 0;
var value = document.getElementById('search').value;
if (value.substring(0, 1) == '%') search_flag += 1;
if (value.substring(value.length - 1) == '%') search_flag += 2;
var search_type = (search_flag == 0) ? 'EQUALS' : 'LIKE';
if (search_flag == 1) {
    // % is at beginning of string
    // do stuff...
} else if (search_flag == 2) {
    // % is at end of string
    // do stuff...
} else if (search_flag == 3) {
    // % is at beginning and end of string
    // do stuff...
}

如果你只需要一个简单的EQUALS/LIKE检查,这是完全不必要的,但如果你需要特定的通配符位置,这是可扩展的。

function test() {
    var name = document.getElementById("search").value;
    if( name.substring(0,1) == "%" || name.substring(name.length - 1, name.length) == "%"){
        var search_type = "LIKE";
    }
    else {
        var search_type = "EQUALS";
    }
}