1. Trang chủ
  2. » Công Nghệ Thông Tin

Tương tác giữa PHP và jQuery - part 33 pptx

10 209 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 1,35 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Using Character Class Shorthand Certain character classes have a shorthand character.. For example, there is a shorthand class for every word, digit, or space character: • Word character

Trang 1

<style type="text/css">

em {

background-color: #FF0;

border-top: 1px solid #000;

border-bottom: 1px solid #000;

}

</style>

</head>

<body>

<?php

/*

* Store the sample set of text to use for the examples of regex

*/

$string = <<<TEST_DATA

<h2>Regular Expression Testing</h2>

<p>

In this document, there is a lot of text that can be matched

using regex The benefit of using a regular expression is much

more flexible &mdash; albeit complex &mdash; syntax for text

pattern matching

</p>

<p>

After you get the hang of regular expressions, also called

regexes, they will become a powerful tool for pattern matching

</p>

<hr />

TEST_DATA;

/*

* Use regex to highlight any occurence of the letters a-c

*/

$pattern = "/([a-c])/i";

echo preg_replace($pattern, "<em>$1</em>", $string);

/*

* Output the pattern you just used

*/

echo "\n<p>Pattern used: <strong>$pattern</strong></p>";

?>

</body>

</html>

Trang 2

don’t need to include both uppercase and lowercase versions of the letters Without the modifier, you

would need to use [A-Ca-c] to match either case of the three letters

Figure 9-5 Any character from A-C is highlighted

Matching Any Character Except

To match any character except those in a class, prefix the character class with a caret (^) To highlight

any characters except A-C, you would use the pattern /([^a-c])/i (see Figure 9-6)

Figure 9-6 Highlighting all characters, except letters A-C

■ Note It’s important to mention that the preceding patterns enclose the character class within parentheses Character classes do not store backreferences, so parentheses still must be used to reference the matched text later

Trang 3

Using Character Class Shorthand

Certain character classes have a shorthand character For example, there is a shorthand class for every word, digit, or space character:

• Word character class shorthand (\w): Matches patterns like [A-Za-z0-9_]

• Digit character class shorthand (\d): Matches patterns like [0-9]

• Whitespace character class shorthand (\s): Matches patterns like [ \t\r\n]

Using these three shorthand classes can improve the readability of your regexes, which is extremely convenient when you’re dealing with more complex patterns

You can exclude a particular type of character by capitalizing the shorthand character:

• Non-word character class shorthand (\W): Matches patterns like [^A-Za-z0-9_]

• Non-digit character class shorthand (\D): Matches patterns like [^0-9]

• Non-whitespace character class shorthand (\S): Matches patterns like [^ \t\r\n]

■ Note \t, \r, and \n are special characters that represent tabs and newlines; a space is represented by a

regular space character ( )

Finding Word Boundaries

Another special symbol to be aware of is the word boundary symbol (\b) By placing this before and/or

after a pattern, you can ensure that the pattern isn’t contained within another word For instance, if you want to match the word stat, but not thermostat, statistic, or ecstatic, you would use this pattern:

/\bstat\b/

Using Repetition Operators

When you use character classes, only one character out of the set is matched, unless the pattern specifies

a different number of characters Regular expressions give you several ways to specify a number of

characters to match:

• The star operator (*) matches zero or more occurrences of a character

• The plus operator (+) matches one or more occurrences of a character

• The special repetition operator ({min,max}) allows you to specify a range of

character matches

Matching zero or more characters is useful when using a string that may or may not have a certain

piece of a pattern in it For example, if you want to match all occurrences of either John or John Doe, you

Trang 4

Matching one or more characters is good for verifying that at least one character was entered For instance, if you want to verify that a user enters at least one character into a form input and that the

character is a valid word character, you can use this pattern to validate the input: /\w+/

Finally, matching a specific range of characters is especially useful when matching numeric ranges

For instance, you can use this pattern to ensure a value is between 0 and 99: /\b\d{1,2}\b/

In your example file, you use this regex pattern to find any words consisting of exactly four letters:

/(\b\w{4}\b)/ (see Figure 9-7)

Figure 9-7 Matching only words that consist of exactly four letters

Detecting the Beginning or End of a String

Additionally, you can force the pattern to match from the beginning or end of the string (or both) If the

pattern starts with a caret (^), the regex will only match if the pattern starts with a matching character If

it ends with a dollar sign ($), the regex will match only if the string ends with the preceding matching

character

You can combine these different symbols to make sure an entire string matches a pattern This is useful when validating input because you can verify that the user only submitted valid information For instance, you can you can use this regex pattern to verify that a username contains only the letters A-Z,

the numbers 0-9, and the underscore character: /^\w+$/

Using Alternation

In some cases, it’s desirable to use either one pattern or another This is called alternation, and it’s

accomplished using a pipe character (|) This approach allows you to define two or more possibilities for

a match For instance, you can use this pattern to match either three-, six-, or seven-letter words in

regex.php: /\b(\w{3}|\w{6,7})\b/ (see Figure 9-8)

Trang 5

Figure 9-8 Using alternation to match only three-, six-, and seven-letter words

Using Optional Items

In some cases, it becomes necessary to allow certain items to be optional For instance, to match both

single and plural forms of a word like expression, you need to make the s optional

To do this, place a question mark (?) after the optional item If the optional part of the pattern is

longer than one character, it needs to be captured in a group (you’ll use this technique in the next

section)

For now, use this pattern to highlight all occurrences of the word expression or expressions:

/(expressions?)/i (see Figure 9-9)

Figure 9-9 Matching a pattern with an optional s at the end

Trang 6

Putting It All Together

Now that you’ve got a general understanding of regular expressions, it’s time to use your new knowledge

to write a regex pattern that will match any occurrence of the phrases regular expression or regex,

including the plural forms

To start, look for the phrase regex: /(regex)/i (see Figure 9-10)

Figure 9-10 Matching the word regex

Next, add the ability for the phrase to be plural by inserting an optional es at the end:

/(regex(es)?)/i (see Figure 9-11)

Figure 9-11 Adding the optional match for the plural form of regex

Next, you will add to the pattern so that it also matches the word regular with a space after it; you

will also make the match optional: /(reg(ular\s)?ex(es)?)/i (see Figure 9-12)

Trang 7

Figure 9-12 Adding an optional check for the word regular

Now expand the pattern to match the word expression as an alternative to es:

/(reg(ular\s)?ex(pression|es)?)/i (see Figure 9-13)

Figure 9-13 Adding alternation to match expression

Finally, add an optional s to the end of the match for expression:

/(reg(ular\s)?ex(pressions?|es)?)/i (see Figure 9-14)

Trang 8

Figure 9-14 The completed regular expression

■ Tip The examples in this chapter go over the most common features of regular expressions, but they don’t cover everything that regexes have to offer Jan Goyvaerts has put together a fantastic resource for learning all of the ins-and-outs of regexes, as well as some tools for testing them, at

http://www.regular-expressions.info/

Adding Server-Side Date Validation

Now that you have a basic understanding of regexes, you’re ready to start validating user input For this app, you need to ensure that the date format is correct, so that the app doesn’t crash by attempting to parse a date that it can’t understand

You’ll begin by adding server-side validation This is more of a fallback because later you’ll add

validation with jQuery However, you should never rely solely on JavaScript to validate user input

because the user can easily turn off JavaScript support and therefore completely disable your JavaScript validation efforts

Defining the Regex Pattern to Validate Dates

The first step toward implementing date validation is to define a regex pattern to match the desired

format The format the calendar app uses is YYYY-MM-DD HH:MM:SS

Setting up Test Data

You need to modify regex.php with a valid date format and a few invalid formats, so you can test your

pattern Start by matching zero or more numeric characters with your regex pattern Do this by making the following changes shown in bold:

Trang 9

<!DOCTYPE html

PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

<meta http-equiv="Content-Type"

content="text/html;charset=utf-8" />

<title>Regular Expression Demo</title>

<style type="text/css">

em {

background-color: #FF0;

border-top: 1px solid #000;

border-bottom: 1px solid #000;

}

</style>

</head>

<body>

<?php

/*

* Set up several test date strings to ensure validation is working

*/

$date[] = '2010-01-14 12:00:00';

$date[] = 'Saturday, May 14th at 7pm';

$date[] = '02/03/10 10:00pm';

$date[] = '2010-01-14 102:00:00';

/*

* Date validation pattern

*/

$pattern = "/(\d*)/";

foreach ( $date as $d )

{

echo "<p>", preg_replace($pattern, "<em>$1</em>", $d), "</p>";

}

/*

* Output the pattern you just used

*/

echo "\n<p>Pattern used: <strong>$pattern</strong></p>";

?>

</body>

Trang 10

After saving the preceding code, reload http://localhost/regex.php in your browser to see all

numeric characters highlighted (see Figure 9-15)

Figure 9-15 Matching any numeric character

Matching the Date Format

To match the date format, start by matching exactly four digits at the beginning of the string to validate

the year: /^(\d{4})/ (see Figure 9-16)

Figure 9-16 Validating the year section of the date string

Next, you need to validate the month by matching the hyphen and two more digits:

/^(\d{4}(-\d{2}))/ (see Figure 9-17)

Ngày đăng: 04/07/2014, 17:20

TỪ KHÓA LIÊN QUAN