PHP正则表达式规则

时间:2016-10-07 01:26:07

标签: php regex

我正在寻找匹配正则表达式的一些规则,

我花了10个小时,我得到的是

  

/ ^ [A-ZA-Z] [A-ZA-Z0-9 _] [A-ZA-Z] $

我希望这个正则表达式在用户名

上使用它
string must start with [A-Z-a-z]

allowed characters [A-Za-z0-9_.]

no double . in a row

string must end with [A-Za-z]

Langueage:PHP

功能:preg_match

结果:

"1Hello";   // Should be false
"Hello1";   // Should be false
"Hel..lo";  // Should be false
"Hel#lo";   // Should be false
"Hello";    // Should be true
"Hel_5.lo"; // Should be true

3 个答案:

答案 0 :(得分:0)

你最好在这里使用两个正则表达式。

如果您的字符串与^[A-Za-z][A-Za-z0-9_.][A-Za-z]$(您当前使用的正则表达式)匹配,请检查它是否也与\.\.匹配。没有两个连续点的字符串匹配后一个正则表达式(字面意思是“点后跟一个点”)。

答案 1 :(得分:0)

来自https://www.regex101.com/r/Xcgw7k/1/tests

的大量帮助

我找到了解决方案,我需要的是“/ ^(?![^ A-Za-z])(?!。* ..)[A-Za-z0-9 _。] +(?

答案 2 :(得分:0)

您的^[A-Za-z][A-Za-z0-9_.][A-Za-z]$匹配一封信,然后是一封信/数字/ . / _,然后是一封信。只有一个3字符串。

您需要的是

^(?=[A-Za-z])(?=.*[A-Za-z]$)(?!.*\.{2})[A-Za-z0-9_.]*$

请参阅this regex demo

<强>详情:

  • ^ - 字符串开头
  • (?=[A-Za-z]) - 下一个字符(=第一个字符,因为这个正面的预测就在^之后)必须是ASCII字母
  • (?=.*[A-Za-z]$) - 字符串(没有换行符)必须以ASCII字母结尾(注意:此检查可以以{look {1}的形式移动到$之前的模式的末尾{ {1}})
  • (?<=[A-Za-z]) - 字符串中任何地方 不得连续2个点(因为此负前瞻包含(?!.*\.{2})匹配任何0+字符(不含DOTALL修饰符,不包括换行符号).* - 2点之前)
  • \.{2} - 0+允许的字符
  • [A-Za-z0-9_.]* - 字符串结束。