字符串匹配和不匹配的正则表达式问题

时间:2015-11-13 09:36:52

标签: javascript jquery regex

全新的Javascript并阅读了不少但似乎无法做到这一点。我将dType链接到HTML页面中的onclick事件。如果用户输入不是数字并且输入不匹配,那么我似乎无法在第一个if语句中获得正确的语法,如果我想要发出警报,那么' true'或者' false'。第二个if似乎匹配任何相等长度的字符串,而我虽然这使得数组项不区分大小写。对于第四个是别的,我希望提醒用户输入-infinity和infinity之间的值。最终目标是提供有关可能的数据类型的一些信息,尽管从技术上讲,输入到提示中的任何内容都是字符串。据我所知,有很多关于所有这些的文档,我已经阅读了几个小时,希望直接询问会帮助我了解这里发生的事情。感谢任何花时间阅读本文的人,尽管它的结构很差。



function dType() {
    var inputP= prompt("Type something Nice and Ill tell you something useful:");

    if (inputP === "") {
 	    alert('At least give me something...');
    } else if (isNaN(inputP)) && inputP.match(^(?!'true' || 'false').)*$){
 	    alert('This is a String');
    } else if inputP.match(/['true','false']/i){
	    alert('This might be a boolean');
    } else if inputP.match(/\d+/g){
	    alert('This has some numbers in it')
    } else if inputP = (inputP > MATH.min('') && inputP < MATH.max('')){
        alert('this is a number')
    }
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

您的第一个else if包含语法错误,主要是因为您没有将正则表达式放在正则表达式引号(/.../)中。

我认为你试图使用的表达方式也比你想要的更复杂,它只能是:

} else if (isNaN(inputP)) && !inputP.match(/^(?:true|false)$/)) {

...表示&#34;匹配输入的开头,后跟truefalse,然后是输入结束&#34;。 (你是对的,你需要一个小组来确保交替(|)仅适用于true / false而不是^$;你使用了一个捕获组,这是可以的;我在上面使用了一个非捕获组 - (?:...) - 因为我们不使用捕获的文本。)然后我们否定结果({{1因为你想要匹配那些。

但通常情况下,如果您只是想知道某些内容是否匹配,而不是!您使用String#match

RegExp#test

但是还有其他一些问题:

  • 您需要始终围绕} else if (isNaN(inputP)) && !/^(?:true|false)$/.test(inputP)) {

  • 中的条件进行调整
  • 第二个if匹配else if[之间列出的任何字符,而不是一对选择

  • 可以对条件进行重新排序以避免重复检查

  • 要检查无穷大,您可以使用]

  • 如果您要检查两次

    ,则需要使用或不使用!isFinite标记来一致地忽略大小写 LI>

由于我们无法在Stack Snippets中使用ialert,因此这里使用输入字段而不是上面修复的一些示例:

&#13;
&#13;
prompt
&#13;
$("input[type=button]").on("click", function() {
  dType($("input[type=text]").val());
});

function dType(inputP) {
  if (inputP === "") {
    show('At least give me something...');
  } else if (/^(?:true|false)$/i.test(inputP)) {
    show('This might be a boolean');
  } else if (isNaN(inputP)) {
    show('This is a String');
  } else if (!isFinite(inputP)) {
    show('this is infinity')
  } else if (isFinite(inputP)) {
    show('this is a number')
  } else if (/\d+/.test(inputP)) {
    show('This has some numbers in it')
  } else {
    show("dunno");
  }
}

function show(msg) {
  $("<p>").text(msg).appendTo(document.body);
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

第一个/ if

似乎有几个问题
} else if (isNaN(inputP)) && inputP.match(^(?!'true' || 'false').)*$){
让我们把它分解。 首先,您在)电话

之后似乎还有额外的isNaN
isNan(inputP) // <-- ends the isNaN call
if (isNan(inputP)) // <-- ends the if condition
if (isNan(inputP) && ...) // what you probably wanted

也就是说,isNaN明确检查某个值是否为字面NaN,而prompt()的情况绝对不是这样,所以我只是将其删除。

其次,正如T.J所指出的那样,你需要像/一样将你的正则表达式包裹起来:/^(?!'true' || 'false').)*$/。它也可以变得更简单。

  

...对于第一个if if语句,如果用户输入不是数字并且输入不匹配,那么我希望发出警报#true;&#39;或者&#39; false&#39;

您可以重新排列顺序以简单匹配true / false,然后检查数字等,以使每个if语句更简单;

if (!inputP) { // an empty string is "falsy"
    // at least give me something
} else if (/^(true|false)$/.test(inputP)) {
    // inputP is "true" or "false"
} else if (/^\d+$/.test(inputP)) {
    // inputP contains only numbers
} else if (/\d+/.test(inputP)) {
    // inputP contains some numbers
} else {
    // inputP is a string
}