【问题标题】:JavaScript: check if string contains '.' (a full-stop) [duplicate]JavaScript:检查字符串是否包含“。” (句号)[重复]
【发布时间】:2017-02-10 22:14:25
【问题描述】:

我正在尝试搜索一个字符串以查看它是否包含句点“。” 我将输入字段的值加载到变量中,然后对该变量运行 javascript 字符串 search() 方法。

var _email = document.getElementById(Input).value;
var contains_dot = _email.search(".");

如果在字符串中找不到句点或表示匹配位置的数字,则 contains_dot 变量应返回 -1。

可悲的是……变量“contains_dot”每次只返回 0。 难道我做错了什么? ..有更好的方法吗?

请注意:

contains_dot = _email.indexOf(".");

不适用于这个问题,因为无论输入什么,它都会返回 0。

【问题讨论】:

  • .indexOf('.')
  • @AnthonySottile 我也试过 .indexOf('.') 结果是一样的……所以没用。
  • 请确认_email 包含您所期望的内容,然后再尝试查看它是否包含. ...
  • @AnthonySottile 有正确的答案。在调用_email.indexOf('.') 之前执行console.log(_email) 以确保您的输入字符串是您所期望的。

标签: javascript string forms search


【解决方案1】:

为什么会这样?

_email.search(".");之所以每次都返回0,是因为String.prototype.search是以正则表达式为输入的。

. 表示匹配正则表达式中的任何字符。换句话说,如果您的输入至少有一个字符,它将返回 0。


解决方案

如果您只是将其更改为_email.search(/\./);,它将完全按照您的预期工作。

浏览器支持:所有已知浏览器

如果您不关心浏览器支持,您也可以使用 Cade Brown 提到的 _email.includes('.');

See here 供参考。浏览器支持:仅 Chrome 41+ 和 Firefox 40+(最近的浏览器)

【讨论】:

  • 使用正则表达式似乎有点过头了。 indexOf 在这种情况下更好。
  • 谢谢,您的 sn-p 代码完全符合我的要求。而且我还学到了一些关于“匹配正则表达式中的任何字符”的知识。
  • @ReallyNiceCode Great :) 您可以查看 here 以获取有关 JS RegEx 中 . 的更多信息。如果您只需要找到点,我会推荐indexOfincludes,正如其他人提到的那样。他们应该在性能方面更有效率。 indexOf 也兼容所有已知的浏览器。
  • @jonathanGB 同意。我想指出为什么原始代码不起作用,并根据 OP 的原始推理提供快速修复。
  • 我明白了,你解释得很好。但是您应该编辑您的答案以提及 indexOf 以及为什么应该在此处使用它而不是 search,如果需要兼容性,可能会超过 includes
【解决方案2】:

search 将其参数解释为正则表达式,因此您需要使用(双)反斜杠转义 .,否则它将匹配任何字符:

var contains_dot = _email.search("\\.");

但是因为不需要正则表达式,所以使用indexOf会更简单:

var contains_dot = _email.indexOf(".");

【讨论】:

  • 'var contains_dot = _email.search("\\.");' ...实际上完成了工作,谢谢。 _email.indexOf(".");之前试过,返回的都是0
  • 嗯...这里肯定有其他事情发生,因为这正是 indexOf 所做的。例如'foobar'.indexOf('.') 返回 -1。
【解决方案3】:

您可以使用:string.includes(".") 这将返回 truefalse

如果您想要1-1,只需使用:

(x.includes(".")) ? 1 : -1

编辑:

在搜索了更多之后,我遇到了: Browser support for array.include and alternatives 和别的。

使用x.indexOf(".") > -1

【讨论】:

  • 谢谢,string.includes(".") 为我完成了这项工作。我也会阅读链接的帖子。
猜你喜欢
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多