全新的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;
答案 0 :(得分:2)
您的第一个else if
包含语法错误,主要是因为您没有将正则表达式放在正则表达式引号(/.../
)中。
我认为你试图使用的表达方式也比你想要的更复杂,它只能是:
} else if (isNaN(inputP)) && !inputP.match(/^(?:true|false)$/)) {
...表示&#34;匹配输入的开头,后跟true
或false
,然后是输入结束&#34;。 (你是对的,你需要一个小组来确保交替(|
)仅适用于true
/ false
而不是^
和$
;你使用了一个捕获组,这是可以的;我在上面使用了一个非捕获组 - (?:...)
- 因为我们不使用捕获的文本。)然后我们否定结果({{1因为你不想要匹配那些。
但通常情况下,如果您只是想知道某些内容是否匹配,而不是!
您使用String#match
:
RegExp#test
但是还有其他一些问题:
您需要始终围绕} else if (isNaN(inputP)) && !/^(?:true|false)$/.test(inputP)) {
第二个if
匹配else if
和[
之间列出的任何字符,而不是一对选择
可以对条件进行重新排序以避免重复检查
要检查无穷大,您可以使用]
如果您要检查两次
,则需要使用或不使用!isFinite
标记来一致地忽略大小写 LI>
由于我们无法在Stack Snippets中使用i
和alert
,因此这里使用输入字段而不是上面修复的一些示例:
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;
答案 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
}