我需要为程序的某些特定命名属性编写一个正则表达式,但它有一些不寻常的参数。
我有以下正则表达式,但它不适用于空格和此类约束。
^(?:[a-zA-Z0-9\p{L}'\-]{3,48})$
我不确定如何嵌套更具体的约束。当我尝试类似的东西时。
^(?:[']?[a-zA-Z0-9\p{L}]{3,48})$
除非撇号是第一个字母,否则它不起作用。我需要它来检查给出的特殊字符是否在字符串中的任何位置,而不是它在正则表达式中以特定顺序出现的位置。我有RegexBuddy并且已经广泛使用它,但它并没有证明在试图解决这个问题上有任何帮助。
答案 0 :(得分:1)
以下是我的意思:
@"^(?!.*?\s.*?\s|.*?-.*?-|.*?'.*?').{3,48}$"
我不知道这是否完美,但它看起来很接近我。我想弄清楚最后.
是否过宽;如果有人想纠正我,我会欢迎它。
编辑:永远不要满足于单独留下,我发现你可以缩短它。
@"^(?!.*?([-'\s]).*?\1).{3,48}$"
可能会奏效,但我不确定foo-bar'baz'qux
是否会欺骗它。我不认为这将是一个问题。你可以试一试。
答案 1 :(得分:1)
这个正则表达式应该这样做:
/^(?!(?:.*[ ]){2})(?!(?:.*[']){2})(?!(?:.*[-]){2})(?=[a-zA-Z0-9 \p{L}'-]{3,48}$)/
/
^ # start of string
(?!(?:.*[ ]){2}) # no greater than 1 space
(?!(?:.*[']){2}) # no greater than 1 apostrophe
(?!(?:.*[-]){2}) # no greater than 1 dash
(?=[a-zA-Z0-9 \p{L}'-]{3,48}$) # 3 - 48 characters of this class
/x
答案 2 :(得分:0)
^(?=[^']*'?[^']*$)(?=[^-]*-?[^-]*$)(?=[^ ]* ?[^ ]*$)[\p{L} '-]{3,48}$