Javascript string.length不等于Python len()

Javascript string.length不等于Python len(),javascript,python,Javascript,Python,假设在HTMLtextarea中输入以下文本: 123456 7 如果通过javascript计算此文本的长度,即string.length,则得出10 现在,如果输入的长度是用python度量的,即通过len(string),那么它就是13 它在人眼看来不像13,但如果在python中运行print repr(string),我们会得到123456\r\n\r\n7。即13个字符,而不是10个。作为参考,这个测试是在Ubuntu操作系统中进行的 python有没有办法通过模仿javasc

假设在HTML
textarea
中输入以下文本:

123456


7
如果通过javascript计算此文本的长度,即
string.length
,则得出
10

现在,如果输入的长度是用python度量的,即通过
len(string)
,那么它就是
13

它在人眼看来不像
13
,但如果在python中运行
print repr(string)
,我们会得到
123456\r\n\r\n7
。即
13个
字符,而不是
10个
。作为参考,这个测试是在Ubuntu操作系统中进行的

python有没有办法通过模仿javascript的
string.length的
结果的机制来报告字符串长度?也就是说,更简单地说,如何在python中获得
10


我知道我可以手动迭代并将
\r\n
折叠成一个字符,但我想知道是否有一种更健壮的方法,甚至是内置的方法?在任何情况下,一个说明性的例子将是伟大的

您可以使用比迭代更优雅的正则表达式。将字符
\n
\r
替换为
'
就可以了

使用python的re模块

import re
x = '123456\r\n\r\n\r\n7'
y = re.sub(r'\r\n','\n',x)
print(len(y)) #Answer will be 10

如需进一步参考,请查看

如何将HTML
textarea
输入到Python?@KonradRudolph这是一个POST请求,用于将数据发送到Django视图。在python中输入验证时,我检查
len
。python和Javascript以相同的方式报告相同的内容,将数据(带有转义的换行符)放入控制台中的JS字符串中,您将看到它也报告13,因此很可能是浏览器正常化了提交。您可以假设唯一的区别是换行符,因此可以在python端将
\r
替换为零(或者将
\r\n
替换为
\n
),但是您最终会发现Javascript计算UTF-16代码单元,而python(2)计算代码点,一旦有人在你的文本区域中放置表情符号,这将是一个问题。我也不会对提交时应用合成或分解的浏览器感到惊讶,因此会再次提供完全不同的数据。一个有用的信息是,浏览器需要发送表单数据,当在post中使用application/x-www-form-urlencoded'时,使用CR LF,基于医生:对不起,我的错。没有正确地阅读问题。我已经编辑了答案。如果我们有多个连续的新行,我们可以像
re.sub(r'\n\s*\n','\n',string)
是的,我们可以。另外,re.sub(r'\n+','\n',string)更简单。检查以测试正则表达式。