我热衷于同时使用[^\u0000-\u007F]+
和^[A-Za-z0-9._-](?:[A-Za-z0-9._ -]*[A-Za-z0-9._-])?$
作为一个正则表达式,但它太复杂了,我无法让它工作?任何想法如何整合?
我想使用JavaScript版本进行客户端验证,使用Php版本进行服务器端验证。
答案 0 :(得分:2)
我建议使用[\u0080-\uFFFF]
代替[^\u0000-\u007F]
的Unicode表格的剩余部分。
在JS中,\w
匹配[A-Za-z0-9_]
,我建议使用
^[\u0080-\uFFFF\w.-](?:[\u0080-\uFFFF\w. -]*[\u0080-\uFFFF\w.-])?$
请参阅demo
在PHP中,只需使用\p{L}
with /u
modifier:
$re = '/^[\p{L}0-9_.-](?:[\p{L}0-9_. -]*[\p{L}0-9_.-])?$/u';
^^^^^ ^^^^^ ^^^^^ ^
看起来没有人喜欢PHP中的\uXXXX
。 @nhahtdh确认匹配相同代码点可能存在问题。