通过Regex接受Unicode字符和Underscore

时间:2011-09-02 16:33:39

标签: php regex

if(preg_match('@^([^\W_]*\s){0,3}[^\W_]*$@', $_POST['txt_username_reg'])) 
. . .

以上行用于PHP。

'@^([^\W_]*\s){0,3}[^\W_]*$@'

正则表达式允许“英文字符+数字+最多3个空格”。

我如何允许以下内容:

  • 4张最大值& Unicode字符(仅允许不带特殊字符 - 放弃括号内的请求。)

2 个答案:

答案 0 :(得分:1)

\ W将与标准ASCII英文字符匹配,我之前已经对此进行了研究,直到现在才找到解决方案。

我通常会建议匹配单词的分隔符(或边界),并禁止任何不需要的字符。

但是有不同的方法, 请查看这些链接以获取更多信息。

  1. http://www.regular-expressions.info/unicode.html
  2. http://www.regular-expressions.info/refunicode.html
  3. http://www.regular-expressions.info/wordboundaries.html

答案 1 :(得分:1)

\p{L}匹配任何Unicode字母。所以

if(preg_match('/^(?:\p{L}*_){1,4}\p{L}*$/u', $_POST['txt_username_reg']))

实现您的要求。但是,目前这些要求允许_作为密码,因此您可能需要重新考虑这些。