Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery验证文本lentgh:javascript说ok maxlength<;=300但php计数为306_Javascript_Php_Jquery_Regex_Maxlength - Fatal编程技术网

Jquery验证文本lentgh:javascript说ok maxlength<;=300但php计数为306

Jquery验证文本lentgh:javascript说ok maxlength<;=300但php计数为306,javascript,php,jquery,regex,maxlength,Javascript,Php,Jquery,Regex,Maxlength,我不明白为什么javascript和php不一致 以下是示例文本: Bonjour, Je suis ravi de soumettre mon problème à la communauté stackoverflow - franchement c'est la meilleure du web pour les questions de codage . Ce texte est fictif mais illustre bien ce que mes visiteurs parfois

我不明白为什么javascript和php不一致

以下是示例文本:

Bonjour,
Je suis ravi de soumettre mon problème à la communauté stackoverflow - franchement c'est la meilleure du web pour les questions de codage .
Ce texte est fictif mais illustre bien ce que mes visiteurs parfois postent sur mon formulaire de contact en termes de longueur et contenu.
Merci salut
因此,如果我在规则(jquery验证)中使用该代码:

demande: {
required: true,
rangelength: [5, 300],
regex: /^[a-zA-Z0-9 \'\’\.\,\;\!\?\:@_°àâéèëêîïôùûçÀÂÇÈÉÊËÏÎÔÙÛ\s\S\(\)\/\-]*$/
}
或者这个:

demande: {
required: true,
regex: /^[a-zA-Z0-9 \'\’\.\,\;\!\?\:@_°àâéèëêîïôùûçÀÂÇÈÉÊËÏÎÔÙÛ\s\S\(\)\/\-]{5,300}$/
}
…在这两种情况下,jquery都不报告任何内容(暗示:文本不超过300个字符),但如果我用PHP测试$u POST['demande']:

echo 'count text = '.strlen($_POST['demande']);
…说306个字符o

如果我使用这个代码:

if(preg_match("#^[a-zA-Z0-9 \'\’\.\,\;\!\?\:@_°àâéèëêîïôùûçÀÂÇÈÉÊËÏÎÔÙÛ\s\S\(\)\/\-]{5,300}$#", $_POST['demande'])){
echo 'good';
} else { echo 'wrong'; }
…说“错”


那么为什么你认为PHP不同意呢?

这种差异很可能是由换行符或字符串中的变音符号引起的,尽管我不熟悉JS/PHP文本编码的细节,所以我不能给你一个明确的答案。我建议你从Tyhat开始研究谢谢。关于strlen错误,我发现mb_strlen更好,因为多字节。因此,仍然存在正则表达式的问题,PHP不能像Javascript那样解释正则表达式。你知道PHP代码(preg_match)有什么问题吗?这是因为PHP中的strlen获取字符串的长度(以字节为单位),对于你的情况,你应该使用它将给出
300
,因为它计算实际字符串长度而不是字节长度,我怀疑javascript将所有拉丁字符视为PHP
grapheme
字符,
mb_strlen
将返回字符串的
303
,因为它也使用字节长度来计算字符。太棒了!我从来没有听说过格拉菲姆·斯特伦。非常感谢。还有其他类似的东西,PHP可以在我的preg#u匹配中找到300个字符而不是超过300个字符吗?我想我找到了PHP正则表达式的诀窍:在最后一个#之后添加字母u,这样看起来就可以了:…{5300}$#u