Javascript:str.indexOf不使用£;符号

Javascript:str.indexOf不使用£;符号,javascript,angularjs,Javascript,Angularjs,我一辈子都搞不明白为什么这不管用 用户输入一个字符串,我将其转换为便士(1磅=100便士)。如果字符串包含作为第一个字符的£symbol,我知道将其乘以100进行转换 我的问题是,我正在使用if语句来查看第一个字符是否正确。我使用的是indexOf(),但它没有捕获字符。我甚至使用了console.log(userInput.indexOf(“;”)查看返回的内容,并记录0。据我所知,这只在if语句中不起作用 这是我的密码: HTML <html ng-app="main"> <

我一辈子都搞不明白为什么这不管用

用户输入一个字符串,我将其转换为便士(1磅=100便士)。如果字符串包含作为第一个字符的£symbol,我知道将其乘以100进行转换

我的问题是,我正在使用if语句来查看第一个字符是否正确。我使用的是
indexOf()
,但它没有捕获字符。我甚至使用了
console.log(userInput.indexOf(“;”)
查看返回的内容,并记录
0
。据我所知,这只在if语句中不起作用

这是我的密码:

HTML

<html ng-app="main">
<head>
    <meta charset="ISO-8859-1">
    <title></title>
    <script src ="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.min.js" type="text/javascript"></script>

    <link rel="stylesheet" type="text/css" href="main.css">
</head>
<body ng-controller="mainController">
        <input type="submit" ng-click="trim()">
    <script type="text/javascript" src="main.js"></script>
</body>
</html>


我一直在使用
123
进行
用户输入
,当我输入它时,它会显示
您输入了无效字符
。感谢所有帮助。

不是您的
用户输入。indexOf(“£”)==0
不起作用。这是由于你的线路

userInput = userInput.substr(1);
应该是编辑器将文件保存为UTF-8,HTML页面字符编码表示它是ISO-8859-1。现在
“£”.length
2
,您的
userInput.substr(1)
不起作用。在这种情况下,它需要是
userInput.substr(2)
,但我认为最好将文件编码与
匹配

您可以将文件的编码更改为ISO-8859-1,这样就可以正常工作。(在Emacs中,使用
C-x返回f
,然后选择
iso-8859-1
,然后再次保存文件)

或者简单地声明
以匹配文件的编码,并且
userInput.substr(1)
将按预期工作

样本:

此示例页面正在使用
,并且正在使用预期的结果。

(此社区wiki答案的灵感来源于,但似乎需要对该答案进行大量编辑。)

这听起来像是编码不匹配的问题。如果您的JavaScript文件使用一个字符集(例如,ISO-8859-1,某些Windows工具称之为“ANSI”)进行编码,但您的服务器使用另一个字符集(例如,UTF-8)为其提供服务,则文件中的
字符将无法正确识别。如果文件是作为UTF-8使用的ISO-8859-1,
将是无效字符。如果文件是作为ISO-8859-1使用的UTF-8,则它将是两个字符。在任何一种情况下,它都不会与用户输入的
匹配

要更正它,请执行以下操作:

  • 确保您知道JavaScript(以及HTML、CSS等)文件实际保存的编码。您的文本编辑器应该具有这样做的功能。如果您的页面主要是西方文本,如英语,我强烈推荐UTF-8

  • 确保对HTML和JavaScript文件使用相同的编码。我确信对它们使用不同的编码是可能的,但这将是一件痛苦的事。保持生活简单,始终使用相同的编码

  • 确保服务器在服务这些资源时正确识别字符集,例如,在发送
    内容类型
    响应头时,它应该是
    内容类型:application/javascript;charset=UTF-8
    ,用于UTF-8 JavaScript文件(不仅仅是
    内容类型:application/JavaScript


  • console.log(userInput.indexOf(“;”)
    将帮助您检查
    是否是第一个字符。如果前面有空格怎么办?您需要将上面的代码块转换为一个空格(使用
    工具栏按钮和添加必要的lib等可以轻松完成)。一句话:如果字符串中有一个,
    indexOf
    会找到它。@AndrewEvt:No。我们不要在黑暗中用
    控制台。log
    火炬绊倒。让我们用调试器打开指示灯。@user5854440:那很好,但问题不是代码太多。再次:通过
    按钮将其转换为堆栈片段。这是一个可以运行的例子。(堆栈片段基本上是JSFIDLE、jsBin或CodePen的现场模拟,但功能丰富程度要低得多。不过,完全取决于此。)如果这样做,那么运行它并使其失败;我们也可以运行它,让它失败,并向您解释发生了什么。这可能是一个字符集问题,但盲目添加
    并不是解决方案。在整个过程中正确处理字符集(包括脚本和HTML、使用的任何后端等)将是一个解决方案。@T.J.Crowder它不是“盲目添加
    ”是的,现在的答案实际上说明了更多。当我在上面发表评论时,它没有。
    userInput = userInput.substr(1);