PHP正则表达式 - 必须至少包含UTF-8中的任意2个字母

时间:2015-12-07 21:23:40

标签: php regex string utf-8

现在,我正在尝试使用以下条件创建PHP正则表达式:

  • 接受所有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

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

1 个答案:

答案 0 :(得分: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个字符
  • $ - 字符串结尾