【问题标题】:Regex: character set validation正则表达式:字符集验证
【发布时间】:2017-01-03 14:29:33
【问题描述】:

我有这个正则表达式^[a-zA-Z_ ,.'-]+$ 用于Name 验证,它工作正常。但问题是,允许使用撇号会引发一些问题。所以我在验证之前编码了撇号。

name = name.Replace("'", "'");

现在任何像john's doe 这样的有效名称看起来都像john's doe,它不能用当前的正则表达式进行验证。

现在我想要检查名称是否包含准确的' 以及有效的字符集。

注意:我不想将&; 添加到当前字符集,因为这将允许&; 作为有效名称。

【问题讨论】:

  • 为什么不以正确的方式做呢?您的图案存储在哪里?在一些 XML 中?为什么不在 CData 块中使用它? ^([a-zA-Z_ ,.-]|')+$ 看起来对人和正则表达式引擎都不好。
  • 允许使用撇号会导致什么问题?我想你可以这样做 ^[a-zA-Z_ ,.-]+'[a-zA-Z_ ,.-]+$ 假设撇号永远不是第一个或最后一个字符。
  • 我正在使用sitecore cms 并且验证在服务器端运行。我不熟悉Cdata
  • 好的,^([a-zA-Z_ ,.-]|')+$ 有效吗?
  • 它工作正常。谢谢。

标签: javascript c# regex validation


【解决方案1】:

使用分组构造(...)(?:...)

^(?:[a-zA-Z_ ,.-]|')+$

详情

  • ^ - 字符串开头
  • (?:[a-zA-Z_ ,.-]|')+ - 两者之一:
    • [a-zA-Z_ ,.-] - 集合中的符号
    • | - 或
    • ' - 一个子字符串 '
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多