Javascript:str.indexOf不使用£;符号
我一辈子都搞不明白为什么这不管用 用户输入一个字符串,我将其转换为便士(1磅=100便士)。如果字符串包含作为第一个字符的£symbol,我知道将其乘以100进行转换 我的问题是,我正在使用if语句来查看第一个字符是否正确。我使用的是Javascript:str.indexOf不使用£;符号,javascript,angularjs,Javascript,Angularjs,我一辈子都搞不明白为什么这不管用 用户输入一个字符串,我将其转换为便士(1磅=100便士)。如果字符串包含作为第一个字符的£symbol,我知道将其乘以100进行转换 我的问题是,我正在使用if语句来查看第一个字符是否正确。我使用的是indexOf(),但它没有捕获字符。我甚至使用了console.log(userInput.indexOf(“;”)查看返回的内容,并记录0。据我所知,这只在if语句中不起作用 这是我的密码: HTML <html ng-app="main"> <
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,则它将是两个字符。在任何一种情况下,它都不会与用户输入的
匹配
要更正它,请执行以下操作:
内容类型
响应头时,它应该是内容类型: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);