我正在寻找匹配正则表达式的一些规则,
我花了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
答案 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_.]*$
<强>详情:
^
- 字符串开头(?=[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_.]*
- 字符串结束。