5

我目前正在为 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

4 回答 4

7

尝试正则表达式:

import re
if re.match(r'^[A-Za-z0-9_]+$', text):
    # do stuff
于 2013-06-07T11:09:45.853 回答
2

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

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

您还可以仅检查 ascii 字符:

if text.replace('_', '').isalnum() and text.isascii():
   # do stuff
于 2021-03-15T16:44:51.343 回答
1
import re
if re.match(r'^\w+$', text):
于 2013-06-07T11:08:59.007 回答
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

如需更多信息,请参阅此处

于 2017-10-12T05:34:25.993 回答