两个正则表达式问题

时间:2011-10-18 14:25:13

标签: regex

1-我打算使用regEx来验证使用此正则表达式的用户名和姓名输入:

/^[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u

但是我不想允许下划线“_”,不只是空格(不能留空)和至少2个字符。我怎样才能将它们应用到上面的regEx?

2-对于我的强密码输入验证,我需要它至少8个字符长度 它应该包含至少一个字母和非字母(例如qsgtest123,qsgtest!@#)

如果你能帮我解决这2个regEx,我将不胜感激。

3 个答案:

答案 0 :(得分:1)

这是名称

/^(?! +$)[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]{2,}$/u

唯一的区别是末尾的“至少2个字符”和(?! +$)意味着“如果只有空格和字符串的结尾则会失败”。

测试员:http://gskinner.com/RegExr/?2uv74

这个用于密码:

/^(?=.*[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð])(?=.*[^a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð]).{8,}$/u

(我正在使用你对“信”的定义:-))。这意味着:

look forward if present any character any number of times followed by a "letter"
look forward if present any character any number of times followed by a "non-letter"
(these two look forward don't "move" the regex cursor, that is still at the first character)
match any character 8 or more times

我发现你正在使用正则表达式末尾的/u。你可能正在使用Perl。要匹配任何字母,您应使用\p{L}(并匹配任何非字母,您应使用\P{L}),而不是写长字符列表。所以第一个会成为:

/^(?! +$)[\p{L} ,.'-]{2,}$/u

和密码一:

/^(?=.*\p{L})(?=.*\P{L}).{8,}$/u

我们将忽略Unicode的可组合变音符号: - )

除非你更愿意加入它们......然后

/^(?! +$)(?=.{2,})(\p{L}\p{M}*|[ ,.'-])*$/u

(我们预先检查所有空格和最小长度的缺失,然后我们检查所有字符串是否由字母组成(每个字母都带有可选的零或多个组合标记)或{}中的其他符号{1}})

答案 1 :(得分:1)

尝试使用:

/^[\p{L},.'-]+[\p{L} ,.'-]*[\p{L},.'-]+$/u

答案 2 :(得分:1)

/^((?!_)[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-])+$/u

以上内容适用于您的第一个问题。