2012-02-05 37 views
2

我正在编辑一个现有项目,并且有一个错误报告系统不接受数字是否在输入中位于第一位,如99%Creative。但是,如果您输入Creative 99%,则系统接受它并将其保存在数据库中。正则表达式,将检查表单中的有效输入

我检查了现有代码,发现他们在preg_match中使用了这个表达式/^ [\ p {L}] +/u。我搜索了一下,发现使用\ w但我的高级不会接受我的答案。他说这是不可接受的。这会给一些问题。

请检查下面的脚本,这是我使用的一个:

$category= trim($_POST['category']); 
if(preg_match('/\W/', $category)){ 
$error='Invalid Input'; 
} 

他告诉我要测试它,使用一些Unicode字符是否会接受像阿拉伯文字,混合(字母+阿拉伯语) 。这一切都有效,所以它的意思很好,但他仍然不接受。他告诉我要制定另一个正则表达式。

你有什么想法我该怎么做?我可以用什么表达方式。我真的不明白为什么\ w是不可接受的。

回答

4

The PHP manual on PCRE escape sequences说,在由PCRE \w匹配的字符取决于区域设置(和\W\w否定)。

这在全球环境中是不可接受的,因为您不知道使用的服务器区域设置。什么是最后setlocale()电话?该网站是否在美国,法国,中国?你永远不会知道。今天可能会适用什么,明天可能不会。用户改变,网站移动。

例如,您的高级服务器可能会使用与您的服务器不同的语言环境。所以他们可能会说对于某些不在当前语言环境中的角色来说,这并不适用于他们。

这就是为什么他们不能接受你的解决方案。您需要改用Unicode character properties

+1

请不要将未注释的链接发送给某些文档作为“答案”。你有> 1000代表,你应该知道这是不好的。 – Tomalak 2012-02-05 11:07:55

+0

修复了答案。 – PointedEars 2012-02-05 11:18:50

+1

现在好多了,+1。 – Tomalak 2012-02-05 11:28:22

2

\p{L}表示任何unicode字母,而\w表示[a-zA-Z0-9_]

你也可以使用的\w

[\p{L}\p{N}]+ 

也就是说,字母或数字一次或多次。

+1

据我所知,PCRE中的'\ w'不支持Unicode。 – 2012-02-05 11:05:19

+0

@TimPietzcker:是的,我没有这么说。编辑的答案澄清。 – Toto 2012-02-05 11:08:39

+0

手动说\ w取决于语言环境。这就是为什么这里不被接受。 – PointedEars 2012-02-05 11:08:58

2
/^[\p{L}]+/u 

的意思是 “匹配以Unicode字母开头的字符串”。它将与字符串Creative 99%中的Creative匹配。

\w PCRE正则表达式匹配ASCII字母,数字和下划线。

如果您将数字添加到您的字符类,也会接受以数字开头的字符串。

/^[\p{L}\p{N}]+/u 

将字符串99% Creative在匹配99

+0

我用这个正则表达式/^[\ p {L} \ p {N}] +/u但为什么它不会接受我输入%才华。我的老师测试它,并输入那些有才华的文本,它不保存信息。他说它应该接受这些文本。那个正则表达式有什么问题? – user1149244 2012-02-13 14:51:15

相关问题