只接受python中字符串的字母数字字符和下划线

时间:2013-06-07 10:55:00

标签: python arcpy parameters field validation

我目前正在为ArcMap 10(updateMessages)中的工具参数编写验证代码,并且需要阻止用户在字符串中使用非字母数字字符,因为它将用于命名要素类中新创建的字段。

我到目前为止使用的是'str.isalnum()',但这当然不包括下划线。是否有一种只接受字母数字字符和下划线的有效方法?

if self.params[3].altered:
  #Check if field name already exists
  if str(self.params[3].value) in [f.name for f in arcpy.ListFields(str(self.params[0].value))]:
    self.params[3].setErrorMessage("A field with this name already exists in the data set.")
  #Check for invalid characters
  elif not str(self.params[3].value).isalnum():
    self.params[3].setErrorMessage("There are invalid characters in the field name.")   
  else:
    self.params[3].clearMessage()

return

4 个答案:

答案 0 :(得分:3)

尝试正则表达式:

import re
if re.match(r'^[A-Za-z0-9_]+$', text):
    # do stuff

答案 1 :(得分:2)

import re
if re.match(r'^\w+$', text):

答案 2 :(得分:0)

如果您使用的是Python3,并且字符串中存在非ASCII字符,则最好使用8位字符串设置编译正则表达式。

import sys
import re

if sys.version_info >= (3, 0):
    _w = re.compile("^\w+$", re.A)
else:
    _w = re.compile("^\w+$")

if re.match(_w, text):
    pass

有关详细信息,请参阅here

答案 3 :(得分:0)

另一种方法,在这种特定情况下不使用正则表达式:

if text.replace('_', '').isalnum():
   # do stuff

您也可以只检查 ASCII 字符:

if text.replace('_', '').isalnum() and text.isascii():
   # do stuff