2015-12-07 25 views
2

至少任何2个字母现在,我正在努力创建具有以下这些条件PHP正则表达式:PHP正则表达式 - 必须包含UTF-8

  • 接受所有UTF-8字符
  • 词之间的空格是允许的,只有1个空格而不是多个空格。
  • 允许所有的符号,例如:!#$%^ * &()_- = {} [],除了: “@”
  • 后或字符串之前没有尾随空格。
  • 范围应该是2-16个字符(包括空格)
  • ,且必须包含字符串中的至少2个字母字符。

这里是正则表达式我已经制定了迄今:

/^(?=.{2,16}$)[^@\s]+(?:\h[^@\s]+)*$/um

到目前为止,完成所有不同的是它不符合最后一个条件是,它必须包含以下的至少2个字母。例如:

"..He" //should be true

"He$*" //should be true

".." //should be false

"*%" //should be false

"!#$%^&*()" //should be false since there is no letters

"$$tonyMoney™" //should be true

"أنا أحب جا™" //should be true

"To" //should be true

任何帮助表示赞赏!谢谢!

+0

的一端此用于验证用户名? – Andrew

+0

这很重要@安德鲁? –

+0

[密码的正则表达式(至少2位数和一个特殊字符,最小长度为8)]的可能重复](http://stackoverflow.com/questions/19491670/regular-expression-for-password-at-least-2 -digits-and-one-special-character-and) –

回答

3

您可以实际使用

/^(?![^@]*@)(?!.*\s\s)(?=(?:\P{L}*\p{L}){2})\S.{0,14}\S$/us 

这里是一个regex demo(修改了一下用多行文字演示)。

对于正则表达式与Unicode字符串的工作,你需要指定/u修改。对于.匹配任何字符,你需要使用/s修改。

正则表达式崩溃:

  • ^ - 串
  • 开始
  • (?![^@]*@) - 确保有串
  • (?!.*\s\s)中没有@ - 确保没有连续2个空格
  • (?=(?:\P{L}*\p{L}){2}) - 确保至少有2个Unicode字母
  • \S.{0,14}\S - 2个符号是强制性的,必须开始和与非空白结束,从长2至16个字符
  • $ - 串
+0

请注意''“أناأحبجافاسكريبت™”''超过16个符号。 –

+0

@CasimiretHippolyte:没错,没有想过。 –

相关问题