文字列に数字と非数字の両方の文字が含まれているかどうかを検証するために使用できる正規表現について誰か助けてもらえますか?
使って"\d+\D+"
いますが、うまくいきません。私が持っているテストケースは次のとおりです。
a1
1a
a1b
1ab
ab1
1-2
12-
-12
リストしたテスト ケースはすべて一致するはずです。javascript RegExp.test() を使用しているため、999 または asdf または _+sdf は一致しません。
文字列に数字と非数字の両方の文字が含まれているかどうかを検証するために使用できる正規表現について誰か助けてもらえますか?
使って"\d+\D+"
いますが、うまくいきません。私が持っているテストケースは次のとおりです。
a1
1a
a1b
1ab
ab1
1-2
12-
-12
リストしたテスト ケースはすべて一致するはずです。javascript RegExp.test() を使用しているため、999 または asdf または _+sdf は一致しません。
現在の正規表現は、1 つ以上の数字の後に 1 つ以上の非数字が続く文字列のみに一致します。先読みを使用して、数字の存在を確認できます。
"(?=.*\d).*\D.*"
この(?=.*\d)
部分は、「この後のどこかに、任意の文字が 0 個以上あり、その後に数字が続く」ことを意味します。これにより、数字を文字列のどこにでも表示できます。
この.*\D.*
部分は、「0 個以上の任意の文字、次に非数字、0 個以上の任意の文字に一致する」ことを意味し、文字列内の任意の位置にある非数字と残りの文字 (数字かどうかに関係なく) に一致します。 ) その周りに。
先読みを使用して試すことができます:
.*(?=.*\d)(?=.*\D).*
しかし、正規表現さえ必要ないのではないでしょうか? 使用している言語/ツールによっては、次のようなことができる場合があります。
s
。が空の場合s
は無効です。s
数字の場合:
s
数字以外の文字が見つかるまで、 の他の文字をループします。数字以外が見つからない場合s
は無効です。s
数字が見つかるまで、 の他の文字をループします。数字が見つからない場合s
は無効です。s
は有効です。これは私にとってはうまくいきます。それは( match1 | match2 )どこ| はORを意味します。
(\d+[a-zA-Z]+|[a-zA-Z]+\d+)
数字と数字以外 (数字以外の任意の文字) を意味する場合は、数字の文字クラスを使用でき\d
ます。ただし、ここで見回す必要はありません。数字と文字を意味する場合は、次のように使用できます。比較文字列のために文字列を分解しています。文字の前に数字を、またはその逆を許可するために、演算子を含むグループを使用しています。\D
[^\d]
|
<?php
$string = 'a1 1a a1b 1ab ab1 1-2 12- -12';
$strings = explode(' ',$string);
$pattern = '!([0-9][A-Za-z]|[A-Za-z][0-9])!';
foreach($strings as $tempString){
if(preg_match($pattern,$tempString)){
echo "$tempString matches\n";
} else {
echo "$tempString doesn't match\n";
}
}
?>
出力
a1 matches
1a matches
a1b matches
1ab matches
ab1 matches
1-2 doesn't match
12- doesn't match
-12 doesn't match
\d\D
文字クラスに変更すると、すべてが一致します。
$pattern = '!(\d\D|\D\d)!';
出力
a1 matches
1a matches
a1b matches
1ab matches
ab1 matches
1-2 matches
12- matches
-12 matches