1

私のPHPスクリプトには、次のコードがあります。

if (!preg_match("/[^A-Za-z]/", $usersurname))
   $usersurname_valid = 1; 

これは、名前が2つ以上の単語になる可能性があることに気付くまで機能しました... doh

2つの世界の間に1つのスペースを許可したい場合、誰でもこのコードの書き方を教えてもらえますか?例えば:

Jan Klaasは現在間違っており、Jan Klaasは許可されるべきであり、JanKlaasMartijnなども許可されるべきです。

さらに良いのは、2つ以上のスペースを1に置き換えるpreg replaceです。したがって、
Jan(space)(space)KlaasまたはJan(space)(space)(space)(space)Klaasと書くと、Janが返されます。 (スペース)クラース。

しばらく探し回ったのですが、どういうわけかこのスペースマッチングがうまくいきません。

PS:これが機能するようになったら、もちろんミッドネームとラストネームにもこれを適用します。

===========================================

編集:あなたが私を助けた後、私は私のコードを次のように書き直しました:

// validate usersurname
$usersurname = preg_replace("/\s{2,}/"," ", $usersurname);
if (!preg_match("/^[A-Za-z]+(\s[A-Za-z]+)*$/",$usersurname))
    $usersurname_valid = 1; 
// validate usermidname
$usermidname = preg_replace("/\s{2,}/"," ", $usermidname);
if (!preg_match("/^[A-Za-z]+(\s[A-Za-z]+)*$/",$usermidname))
    $usermidname_valid = 1;
// validate userforename
$userforename = preg_replace("/\s{2,}/"," ", $userforename);
if (!preg_match("/^[A-Za-z]+(\s[A-Za-z]+)*$/",$userforename))
    $userforename_valid = 1;

およびエラー通知

elseif ($usersurname_valid !=1)
    echo ("<p id='notification'>Only alphabetic character are allowed for the last name. $usersurname $usermidname $userforename</p>");
// usermidname character validation
elseif ($usermidname_valid !=1)
    echo ("<p id='notification'>Only alphabetic character are allowed for the middle name. $usersurname $usermidname $userforename</p>");
// userforename character validation
elseif ($userforename_valid !=1)
    echo ("<p id='notification'>Only alphabetic character are allowed for the (EDIT) first name. $usersurname $usermidname $userforename</p>");

スペースの交換はうまく機能しており、A-Za-z+スペースをチェックするにはこのpreg_matchが必要です。この場合、とにかく置き換えられるので、1つ以上のスペースに一致するかどうかは問題ではないと思いますよね?

編集:

私の場合の解決策:

$usersurname = preg_replace("/\s{2,}/"," ", $usersurname);
if (!preg_match("/[^A-Za-z ]/", $usersurname))

これで動作します。助けてくれてありがとう、J0HN

4

1 に答える 1

3

さて、あなたが考えている問題を解決する:

if (!preg_match("/^[A-Za-z]+(\s[A-Za-z]+)*$/",$usersurname)) { ... }

しかし、まあ、それは解決策の一部に過ぎず、防弾ではありません。名前を扱うときによくある間違いのリストを見てください。

したがって、検証アプローチを再考することをお勧めします。

複数のスペースを置き換えることは、次のような個別の命令として実現する方が簡単です。

$processed_usersurname = preg_replace("/\s{2,}/"," ", $usersurname); 

これにより、結果として生じる2つ以上の空白文字(スペース、タブ、改行、および改行)が一致し、単一のスペースに置き換えられます。

于 2012-11-20T11:07:40.997 に答える