用python检测字符串是否包含非英文

背景

工作中经常有些功能限制了只能输入英文字符串,但是客户或者销售同事的文案来源比较多,有些是直接复制的其它渠道或者平台,会存在一些肉眼根本看不来的异常字符,如果内容较长,定位和查找就比较麻烦了。
因此结合之前帮助同事处理过的异常字符串,写了个处理脚本,方便后续同类问题的处理。

使用效果

ascii.gif

通过上述运行输出可以看到,字符中包含NBSP空格,这个大部分的输入框会提示输入非法,但是肉眼很难发现,由于NBSP一般是来源于网页文本的复制粘贴,不影响文本释意,这里我直接用英文空格进行替换。

存在异常空格, 执行替换处理!

其它的标点符号,其实也是存在中文和英文长的很像的情况。但改了可能会影响文本的意思,这部分字符我们不直接替换,而是显示其所在位置,让人工可以快速定位到,来进行合理处理。

检测数据: Ni Digger这 Producto~ Eléct·rico ¥y Electrónico Douchekop, Doucheslang, Handdouche  Construção & Decoração コンピュータ 서비스 製品 الأدوات والأجهزة
异常字符:          这         ~   é  ·     ¥        ó                                                çã          çã  コンピュータ 서비스 製品 الأدوات والأجهزة

最后处理完异常字符的每行数据,存到一个数组里,逐行输出,方便人工进行再次使用。

整形后的全部数据:
Ni Digger这 Producto~ Eléct·rico ¥y Electrónico Douchekop, Doucheslang, Handdouche  Construção & Decoração コンピュータ 서비스 製品 الأدوات والأجهزة

完整代码

def isEnglish(s):
  return s.isascii()

def loop_string(str):
  ascii_strs = []
  hasAscii = False
  print("检测数据:",str)
  for s in str:
    if not isEnglish(s):
      ascii_strs.append(s)
      hasAscii = True
    else:
      ascii_strs.append(" ")
  if hasAscii:
    print("异常字符:","".join(ascii_strs))

def format_data(data):
  print("==" * 50)
  new_data = []
  for str in data:
    if u'\xa0' in str:
      str = str.replace(u'\xa0', u' ')
      print("存在异常空格, 执行替换处理!")
      new_data.append(str)
    loop_string(str)
    print("==" * 50)
  print("整形后的全部数据:")
  for n in new_data:
    print(n)


if __name__ == '__main__':
  data = [
    "要检测的字符串"
  ]
  format_data(data)

把文本粘贴到 要检测的字符串 里运行即可,如果有多个字符串,挨个往数组贴就可以了。

你可能感兴趣的:(用python检测字符串是否包含非英文)