搜索字符串中的通配符

时间:2013-01-02 19:16:11

标签: javascript

我正在尝试构建一个函数来检查是否会在搜索字符串中使用外卡。

实施例

%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>

3 个答案:

答案 0 :(得分:1)

这是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;
}


更新

无论文本中%符号的位置如何,上述代码都能正常工作。如果您对 要么在开头或结尾或两者都感兴趣,请使用以下代码。
DEMO Here

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;
}

答案 1 :(得分:1)

根据您的示例,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检查,这是完全没必要的 - 但如果您需要特定的通配符位置,则可以展开。

答案 2 :(得分:0)

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";
    }
}